¿Por qué algunas funciones tienen guiones bajos "__" antes y después del nombre de la función?

Esto parece ocurrir mucho, y me preguntaba si esto era un requisito en el lenguaje Python, o simplemente una cuestión de convención.

También, ¿podría alguien nombrar y explicar qué funciones tienden a tener guiones bajos y por qué __init__, por ejemplo)