Massimiliano Allegri's men were given a run for their money against the Giallorossi, but secured the victory in a thrilling game
An exciting first half saw Zlatan Ibrahimovic and Nicolas Burdisso trade goals, before veteran Alessandro Nesta put the Rossoneri ahead with a thumping header.
Roma pushed hard for an equalizer after the break, but was punished by Ibrahimovic, who completed his brace. Bojan Krkic found a late goal for the Giallorossi, but it proved to be a mere consolation.
The hosts dominated proceedings early on as they were keeping possession, pinning back the visitors in their own half. This, however, wleft them vulnerable to swift counterattacks and Massimiliano Allegri's players soon took advantage.
In the 17th minute, a sublime cross by Alberto Aquilani found Ibrahimovic, who headed past Maarten Stekelenburg in trademark fashion to give Milan the lead.
Roma, spurred on by conceding a relatively simple goal, decided to send even more bodies into the final third, and the gamble soon produced results.
Some appalling defending by Gianluca Zambrotta allowed Burdisso to head in the equalizer, following a corner on the left as the Rossoneri finally buckled under the pressure.
On the half-hour mark, however, the veteran Nesta put the visitors back in the driving seat with a carbon copy of the Argentinian's strike as he headed past Stekelenburg after a pass by Robinho.
Things went from bad to worse for Luis Enrique's men in the 39th minute, when Fabio Borini picked up and injury and had to be replaced by ex-Barcelona striker and Spain international Bojan.
Roma started brightly in the second period, but was struggling to break AC Milan's resolute defense. The Rossoneri had Nesta to thank in the 55th minute, when the ex-Lazio man made a crucial intervention to prevent a shot from Bojan going past the beaten Christian Abbiati. Moments later, the goalkeeper redeemed himself as he pulled off an immense save to stop a Miralem Pjanic free kick from going in the left corner.
Then, in a curious accident, substituted midfielder Kevin-Prince Boateng was sent off after he allegedly verbally abused the fourth official on his way from the pitch.
Roma was continuing to press and nearly equalized moments later, when Abbiati pulled off an immense reflex save from six yards out to deny Pablo Osvaldo. The Giallorossi, however, were looking increasingly fragile at the back, and soon paid the price for their reckless attacking.
Aquilani was once again the provider, when his cross from the left was met with a header by Ibrahimovic, who completed his brace to put the game beyond the Giallorossi's reach.
Roma ultimately managed to score again through Bojan, but it was too little, too late as the game finished 3-2. Milan returns to the top of the table for the time being, replacing Juventus, which faces Inter in Saturday's late Serie A action.