I agree completely, as it is, sieges can be completely stopped by just a wall or a channel, or a drawbridge, or heck, even a door in many cases. In fact, I made a list in an earlier thread of quite a few ways that a siege could be stopped completely by:
Penetrating the Impenetrable FortressBasically, a siege should have some means of getting through practically any static defenses, given enough time. Breaking down or tunneling through walls, floors, bridging moats, using ladders to scale walls, etc. etc.
Although once you've done that, and fixed all of those things that can just stop a siege without them being able to do anything about it, you can take it a step further. Say for example where you say they can recognize the entrance to your fort. You could take that further, have them try to pathfind into somewhere inside your fortress, but give each action some movement cost based on how much time it takes or such. So, instead of just looking for an open path, there might be a certain cost for breaking down a tile of wall, or bridging a tile of moat, or tunneling through a tile, etc. So if you have some huge solid steel maze of death out front, but there's a location where they can get into your fortress just by digging through a tile of sand and through a flimsy wooden floor, they could find that, and attack that way instead.
And the great thing about that, is that you could add in costs to the system to make the AI much smarter. Say for example it adds a pathing cost around where anyone died in any previous sieges. The AI might not be able to recognize some elaborate trap, but it can keep track of the fact that every single person who has entered a certain corridor in the last couple of sieges has died there. Which would increase the cost for pathing that way, and so the AI will start taking other paths instead. So, instead of sieges always marching into your trap of death again and again forever, after a few times, they would start naturally taking other paths, finding ways to get around it, or other ways to get in, probing the weaknesses of your fortress, finding the locations where they can most easily get in, that doesn't end up in death. Which essentially means that the AI would learn, it would be constantly trying new approaches and clever ways to get into your fortress, from just some simple modified pathfinding.

Edit: Although a lot of this is already covered in stuff to add from the
http://www.bay12games.com/dwarves/dev.html page:
mproved sieges
* Eliminate remaining edge-of-map exploits
* More highly trained attacking soldiers when approprate
* Many trap exploits are handled above by requiring more to produce a trap, things like cage traps should make more sense vs. large creatures etc. (respect strength/ability vs. material, large cages might be separate object)
* Coming up with a plan to overcome pathing obstacles to reach fortress innards
o Ability to dig (optionally, default on)
o Ability to build bridges/ramps
o Ability to use grappling hooks/ladders/climb
* Learning from mistakes if first attempted assault plan fails badly
o For instance, if many siegers are killed, caged, etc. in a given hallway, they shouldn't generally go that way again, even if that means building/climbing/digging
* Siege engine improvements depend on state of boats, lifts/moving fortress sections, since these should all use the same framework