I charge the full amount upfront for retainers. I think this is typical practice but don't quote me on that
I charge upfront for this reason: A retainer is used to book my time for the month. I set aside that many hours for the client. The client is guaranteed that I have those hours available to him/her and their work will be completed. If they don't want to pay a retainer then they take their chances that I'll be available.
Currently the only time I take a deposit is if I am subcontracting out work. I get my clients to pay the sub's deposit. For instance, right now I have subcontracted out an ecommerce site. The sub requires a 50% deposit so my client pays me and then I forward that to the sub.
HTH