سلام
این قضیه کاملا عادی هست و دلیلش هم بخاطر نقاط مختلف شروع شماست. شما یکبار از یک جایی شروع میکنید و به یک دقتی میرسید دفعه بعد مقداردهی اولیه بهتر شما رو در نقطه بهتری میزاره و دقتتون بهتر میشه .
اگر میخوایید در هر بار اجرا دقت ها عینا یکی باشه باید seed یی که الگوریتمهای مختلف شما از اون برای مقداردهی ها استفاده میکنن همیشه یکی باشه . یعنی الگوریتم های مقدادهی اولیه وزن ها + لایه های دارپ اوت و... همه از یک seed واحد استفاده کنن
اینطوری بخوبی میتونید متوجه بشید تغییری که در شبکه دادید آیا تاثیر مثبت یا منفی داشته یا صرفا این تغییر بخاطر نقطه شروع بد بوده .
در کفی میتونید از random_seed در سالور استفاده کنید. ولی یادتون باشه باید از طریق cpu ترین رو انجام بدید یا اینکه در لایه ها از Engine:Caffe استفاده کنید .
عموما هم اسنپ شات رو برای همین میگیرن و اگر هم گزارشی بخوایید بدید میتونید میانگین بگیرید و یا حتی بهترین نتیجه رو عنوان کنید . همه این ها رایج هستند. در رقابت ها معمولا همیشه بهترین دقت گزارش میشه که طی چندین تکرار بدست میاد.
2.خود sgd چیزی بنام momentum نداره . momemntum بعدا بعنوان یه بهبود بهش اضافه شد . روش مومنتوم یا Stochastic gradient descent with momentum یا sgd with momentum هر دوتا یک چیز هستن .
Adagrad و امثالهم هم مثل مومنتوم ورژنهای تغییر داده شده sgd هستن
کتاب شبکه عصبی مارتین هاگان (Neural Network Design 2ndEdition) رو بخونید خوبه . البته یه سرچ ساده هم بکنید اطلاعاتش هست ولی خب این کتاب رو که من دو سه سال پیش خونده بودم خیلی قشنگ این چیزا رو توضیح داده بود.