অ্যাক্টিভেশনগুলির গড় এবং স্কেলিং সামঞ্জস্য করে ব্যাচ নরমালাইজেশন ইনপুট লেয়ারের পাশাপাশি লুকানো স্তরগুলিকে স্বাভাবিক করতে ব্যবহৃত হয়। গভীর নিউরাল নেটওয়ার্কগুলিতে অতিরিক্ত স্তরের সাথে এই স্বাভাবিককরণের প্রভাবের কারণে, নেটওয়ার্কটি গ্রেডিয়েন্টগুলি বিনষ্ট বা বিস্ফোরিত না করে উচ্চতর শিক্ষার হার ব্যবহার করতে পারে। তদ্ব্যতীত, ব্যাচের সাধারণকরণ নেটওয়ার্ককে নিয়মিত করে তোলে যে এটি সাধারণকরণ করা সহজ, এবং এইভাবে ওভারফিটিংকে প্রশমিত করতে ড্রপআউট ব্যবহার করা অপ্রয়োজনীয়।
কেরাসে, ঘন () বা কনভ 2 ডি () বলার সাহায্যে লিনিয়ার ফাংশন গণনা করার পরে, আমরা ব্যাচনরমালাইজেশন () ব্যবহার করি যা একটি স্তরে লিনিয়ার ফাংশন গণনা করে এবং তারপরে আমরা অ্যাক্টিভেশন () ব্যবহার করে স্তরটিতে অ-লিনিয়ারিটি যুক্ত করি।
from keras.layers.normalization import BatchNormalization
model = Sequential()
model.add(Dense(64, input_dim=14, init='uniform'))
model.add(BatchNormalization(epsilon=1e-06, mode=0, momentum=0.9, weights=None))
model.add(Activation('tanh'))
model.add(Dropout(0.5))
model.add(Dense(64, init='uniform'))
model.add(BatchNormalization(epsilon=1e-06, mode=0, momentum=0.9, weights=None))
model.add(Activation('tanh'))
model.add(Dropout(0.5))
model.add(Dense(2, init='uniform'))
model.add(BatchNormalization(epsilon=1e-06, mode=0, momentum=0.9, weights=None))
model.add(Activation('softmax'))
sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='binary_crossentropy', optimizer=sgd)
model.fit(X_train, y_train, nb_epoch=20, batch_size=16, show_accuracy=True,
validation_split=0.2, verbose = 2)
ব্যাচ নরমালাইজেশন কীভাবে প্রয়োগ করা হয়?
ধরুন আমাদের একটি লেয়ারে একটি [l-1] ইনপুট আছে। এছাড়াও আমাদের স্তরের ওজনের জন্য ওজন [l] এবং পক্ষপাত ইউনিট খ [l] রয়েছে। একটি [l] লেয়ারের জন্য অ্যাক্টিভেশন ভেক্টর গণনা করা যাক (যেমন অ-লাইনারিটি যুক্ত করার পরে) l এবং z [l] নন-লিনিয়ারিটি যুক্ত করার আগে ভেক্টর হোন
- একটি [l-1] এবং ডব্লু [l] ব্যবহার করে আমরা স্তর স্তরটির জন্য z [l] গণনা করতে পারি
- সাধারণত ফিড-ফরোয়ার্ড প্রচারে আমরা জেড [এল] এর মতো এই পর্যায়ে জেড [এল] এর পক্ষপাতিত্ব ইউনিট যুক্ত করব [লি] + বি [এল], তবে ব্যাচ সাধারণকরণে খ [এল] সংযোজনের এই পদক্ষেপের প্রয়োজন নেই এবং না b [l] পরামিতি ব্যবহৃত হয়।
- Z [l] এর অর্থ গণনা করুন এবং প্রতিটি উপাদান থেকে এটি বিয়োগ করুন
- স্ট্যান্ডার্ড বিচ্যুতি ব্যবহার করে বিভক্ত (z [l] - গড়)। একে জেড_টেম্প [l] বলুন
এখন নতুন পরামিতিগুলি সংজ্ঞায়িত করুন γ এবং β যা লুকানো স্তরের স্কেলটি নীচে পরিবর্তন করবে:
z_norm [l] = γ.Z_temp [l] + β
এই কোড সংক্ষেপে, ঘন () একটি [l-1] নেয়, ডব্লু [l] ব্যবহার করে এবং জেড [এল] গণনা করে। তারপরে তাত্ক্ষণিক ব্যাচনারমালাইজেশন () z_norm দেওয়ার জন্য উপরের পদক্ষেপগুলি সম্পাদন করবে [l]। এবং তারপরে তাত্ক্ষণিকভাবে সক্রিয়করণ () তান (z_norm [l]) গণনা করবে যাতে একটি [l] দিতে পারে
a[l] = tanh(z_norm[l])