The very first ASDS landing attempt ran out of hydraulic fluid for the grid fins, the engine gimbaling barely managing to get it to the barge...not upright and not at zero velocity.
The next had a sticky valve...my understanding is it was actually for throttle. The control software would command throttle changes, but the valve wouldn't respond until the commanded change was big enough to break it loose, then it'd stick at the new position. The overall effect was that the throttle was lagging behind what the control system expected, which threw things into oscillation with the rocket always overcompensating for its previous errors, always too late to fix things.
The third failure was the Jason-3 launch, which was the last launch of the Falcon 9 v1.1 (non-Full Thrust) with the first version of the legs, and took place in particularly heavy fog. The landing looked perfect, but one leg folded up afterward.
The remaining two failures were on flights 22 and 26, both on ASDS landings from geosynchronous launches with little margin for landing. 22 wasn't expected to make it, 26 came within meters of doing so.
There's probably still things to learn, but they seem out of the "getting it to work" stage and well into "making it work better" stage.