What works best for me, is to first find out where things go wrong (eg why and under which circumstances you have your 'weak moments' etc.) Then I picture myself as the person I would be if I succeed in changing whatever the problem is. Take your time in this phase, it's really important to have a clear view of your goal!
Then I like to set a date for the start of the 'changing process', and if possible a kind of 'deadline' to live towards as well! Another tip that works really well for me: I like to make my decision on forehand, so that you can simply stick to that instead of having to think about it at crucial moments, increasing the risk of making the bad 'weak' choice! Hope this helps you a little bit ;)
I just did this lol, you have to really stand back and look at what's going on around you and then see where or how you fit into this behavior. the subtract your self or the variables out and see your self for what you are then see if this is something you really want to change. If so you will not forgot what you have learned or seen and it will stick with you. It can be very difficult process but if it is worth it, it will be for the best. best of luck.