معرفی یادگیری عصبی ساماندهی شده در کتابخانه تنسورفلو
شبکههای عصبی با سیگنالهای ساماندهی شده استفاده کنند.
یادگیری عصبی ساماندهی شده
دادههای ساماندهی شده کاربردهای مفیدی در خیلی از فعالیتهای یادگیری ماشین دارند. این دادهها حاوی اطلاعات منطقی غنی در میان سایر نمونهها هستند. برای مثال، مدلسازیِ شبکههای رونگاشت citation networks، استنتاج گراف دانش Knowledge Graph و استدلال در خصوص ساختار زبانیِ جملات، و یادگیری اثرانگشتهای مولکولی همگی مستلزم مدلی است که از خروجیهای ساماندهی شده اقدام به یادگیری کند.این ساختارها میتوانند به صورت صریح و یا به صورت ضمنی ارائه شوند. استفاده از سیگنالهای ساماندهی شده در طول آموزش این فرصت را به طراحان و توسعهدهندگان میدهد که دقت مدل بالاتری داشته باشند؛ به ویژه زمانی که میزان دادههای برچسب زده شده نسبتاً کم باشد. آموزش با سیگنالهای ساماندهی شده باعث ایجاد مدلهای مقاوم تر میشود. این شیوهها کاربرد وسیعی در گوگل دارند و نقش بزرگی در بهبود عملکرد مدل ایفا میکنند؛ مثل یادگیری تعبیه شده معنایی تصاویر learning image semantic embedding.
یادگیری عصبی ساماندهی شده (NSL) چگونه کار میکند؟
در یادگیری عصبی ساماندهی شده (NSL)، سیگنالهای ساماندهی شده (که صراحتاً در قالب گراف تعریف میشوند یا به صورت ضمنی در قالب نمونههای تخاصمی استفاده میشوند) برای عادیسازیِ آموزش شبکههای عصبی به کار برده میشوند. لذا مدل تحت اجبار قرار میگیرد تا پیشبینیهای دقیق را یاد بگیرد (بوسیله کمینه کردن supervised loss). در همین حین، شباهت میان ورودیهای یک ساختار را نیز حفظ میکند (بوسیله کمینه کردن neighbor loss). این روش، یک روش متداول است و میتواند در معماریهای هر شبکه عصبی دلخواه از قبیل شبکههای عصبی پیشرو Feed-forward neural network، شبکههای عصبی پیچشی Convolutional neural network و شبکههای عصبی بازگشتی Recurrent neural network بکار رود.
ساخت مدل با یادگیری عصبی ساماندهی شده (NSL)
ساخت مدل به کمک یادگیری عصبی ساماندهی شده (NSL) برای بهرهمندی از سیگنالهای ساماندهی شده به کار سادهای تبدیل شده است. با توجه به گراف و نمونههای آموزش، NSL ابزاری برای پردازش و ادغام این نمونهها در قالب «TFRecords» فراهم میکند. به مثال زیر توجه کنید:
python pack_nbrs.py --max_nbrs=5 \ labeled_data.tfr \ unlabeled_data.tfr \ graph.tsv \ merged_examples.tfr
در وهله بعد، چارچوب NSL از API برای مصرف نمونههای پردازش شده استفاده کرده و عادیسازیِ گراف را مقدور میسازد. بگذارید نگاهی به نمونه کُد داشته باشیم:
import neural_structured_learning as nsl# Create a custom model — sequential, functional, or subclass. base_model = tf.keras.Sequential(…)# Wrap the custom model with graph regularization. graph_config = nsl.configs.GraphRegConfig( neighbor_config=nsl.configs.GraphNeighborConfig(max_neighbors=1)) graph_model = nsl.keras.GraphRegularization(base_model, graph_config)# Compile, train, and evaluate. graph_model.compile(optimizer=’adam’, loss=tf.keras.losses.SparseCategoricalCrossentropy(), metrics=[‘accuracy’]) graph_model.fit(train_dataset, epochs=5) graph_model.evaluate(test_dataset)
ما با کمتر از پنج خط اضافی (از جمله بخش کامنت) به یک مدل عصبی دست یافتیم که از سیگنالهای گراف در طول آموزش استفاده میکند. از دید تجربی، استفاده از ساختار گرافی این امکان را به مدلها میدهد تا بدون کاهش دقت و با دادههای برچسبگذاری شده کمتری به آموزش بپردازند.
اگر ساختار صریحی در کار نباشد، چه باید کرد؟
اگر ساختارهای صریح (مثل گراف) وجود نداشته باشند، چه رویکردی باید در پیش گرفت؟ چارچوبِ NSL ابزارهایی را در اختیار توسعهدهندگان میگذارد تا گرافهایی را از دادههای خام بسازند. در ضمن، چارچوب NSL با فراهم آوردنِ API زمینه را برای استنتاج نمونههای تخاصمی در قالب سیگنالهای ساماندهی شدۀ ضمنی مهیا میکند. نمونههای تخاصمی به صورت تعامدی برای گیج کردن مدل ساخته میشوند؛ آموزش با چنین نمونههایی معمولاً به مدلهایی ختم میشود که در مقابل آشفتگیهای اندک ورودی، عملکرد قوی و خوبی از خود نشان میدهند. در نمونه کُد زیر میبینیم که NSL چگونه امکانِ آموزش با نمونههای تخاصمی را فراهم میکند:
import neural_structured_learning as nsl# Create a base model — sequential, functional, or subclass. model = tf.keras.Sequential(…)# Wrap the model with adversarial regularization. adv_config = nsl.configs.make_adv_reg_config(multiplier=0.2, adv_step_size=0.05) adv_model = nsl.keras.AdversarialRegularization(model, adv_config=adv_config)# Compile, train, and evaluate. adv_model.compile(optimizer=’adam’, loss=’sparse_categorical_crossentropy’, metrics=[‘accuracy’]) adv_model.fit({‘feature’: x_train, ‘label’: y_train}, epochs=5) adv_model.evaluate({‘feature’: x_test, ‘label’: y_test})
ما با کمتر از پنج خط اضافی (از جمله بخش کامنت) به یک مدل عصبی دست یافتیم که با نمونههای تخاصمی آموزش دیده و یک ساختار ضمنی ارائه میکند. از دید تجربی، مدلهای آموزش داده شده بدون نمونههای تخاصمی دقت خیلی پایینی دارند.