If you see TestNG documentation: http://testng.org/doc/documentation-main.html#annotations
@BeforeTest - The annotated method will be run before any test method belonging to the classes inside the <test> tag is run.
@BeforeMethod - The annotated method will be run after all the test methods in the current class have been run.
So, BeforeTest will be initiated before execution of selected package or classes or methods inside <test> tag starts.
On other hand, @BeforeMethod will be executed just before any function/method with @Test annotation starts.
Hope that helps! Let me know your views in comment.