مدلسازی توالی کارآمد برای ML روی دستگاه

افزایش تقاضا برای استنتاج مدل یادگیری ماشین (ML) روی دستگاه (برای دستگاه های تلفن همراه، تبلت ها و غیره) ناشی از افزایش برنامه های کاربردی محاسباتی فشرده، نیاز به نگه داشتن داده های خاص در دستگاه به دلایل حفظ حریم خصوصی و امنیتی، و تمایل به ارائه خدمات زمانی که اتصال شبکه ممکن است در دسترس نباشد. با این حال، استنتاج روی دستگاه، چالش‌های بی‌شماری را از مدل‌سازی گرفته تا نیازهای پشتیبانی پلت فرم را معرفی می‌کند. این چالش‌ها به نحوه طراحی معماری‌های مختلف برای بهینه‌سازی حافظه و محاسبات مربوط می‌شوند، در حالی که همچنان سعی در حفظ کیفیت مدل دارند. از منظر پلتفرم، موضوع شناسایی عملیات و ساخت بالای آنها به نحوی است که بتواند در موارد مختلف استفاده از محصول به خوبی تعمیم یابد.

در تحقیقات قبلی، ما یک تکنیک جدید برای ایجاد تعبیه‌ها (به نام تعبیه‌های مبتنی بر طرح‌ریزی) با معماری‌های کارآمد مانند QRNN (pQRNN) ترکیب کردیم و ثابت کردیم که آنها برای تعدادی از مشکلات طبقه‌بندی صلاحیت دارند. تقویت آنها با تکنیک‌های تقطیر باعث افزایش کیفیت انتها به انتها می‌شود. اگرچه این یک رویکرد مؤثر است، اما برای واژگان بزرگتر و گسترده تر (یعنی همه یونیکدها یا نشانه های کلمه ممکن که می توانند به مدل داده شوند) مقیاس پذیر نیست. بعلاوه، خروجی حاصل از عملیات پروجکشن خود حاوی وزنه های قابل آموزش برای استفاده از پیش آموزش مدل نیست.

مدل‌های بدون توکن ارائه شده در ByT5 نقطه شروع خوبی برای مدل‌سازی روی دستگاه هستند که می‌توانند مسائل مربوط به قبل از آموزش و مقیاس‌پذیری را بدون نیاز به افزایش اندازه مدل برطرف کنند. این امکان پذیر است زیرا این رویکردها ورودی های متن را به عنوان جریانی از بایت ها در نظر می گیرند (هر بایت دارای مقداری است که از 0 تا 255 متغیر است) که می تواند اندازه واژگان را برای جداول جاسازی شده از 30000 به 256 کاهش دهد. اگرچه ByT5 یک جایگزین قانع کننده برای مدل‌سازی روی دستگاه، رفتن از نمایش سطح کلمه به نمایش جریان بایت، طول دنباله‌ها را به صورت خطی افزایش می‌دهد. با میانگین طول کلمه چهار کاراکتر و یک کاراکتر منفرد تا چهار بایت، طول دنباله بایت متناسب با طول کلمه افزایش می‌یابد. این می تواند منجر به افزایش قابل توجه تاخیر استنتاج و هزینه های محاسباتی شود.

ما این مشکل را با توسعه و انتشار سه مدل دنباله جریان بایت جدید برای کتابخانه SeqFlowLite (ByteQRNN، ByteTransformer و ByteFunnelTransformer) برطرف می‌کنیم، که همگی می‌توانند روی داده‌های بدون نظارت از قبل آموزش داده شوند و می‌توانند برای کارهای خاص به‌خوبی تنظیم شوند. این مدل‌ها از نوآوری‌های اخیر معرفی‌شده توسط Charformer استفاده می‌کنند، از جمله یک مدل مبتنی بر ترانسفورماتور کاراکتر سریع که از رویکرد توکن‌سازی زیرکلمه‌ای مبتنی بر گرادیان (GBST) برای عملکرد مستقیم در سطح بایت و همچنین رویکرد توکن‌سازی «نرم» استفاده می‌کند که به ما امکان می‌دهد. برای یادگیری مرزهای نشانه و کاهش طول دنباله. در این پست، ما بر روی ByteQRNN تمرکز می کنیم و نشان می دهیم که عملکرد یک مدل ByteQRNN از پیش آموزش دیده با BERT قابل مقایسه است، علیرغم اینکه 300 برابر کوچکتر است.

معماری مدل توالی

ما از pQRNN، ByT5 و Charformer به همراه بهینه‌سازی‌های پلتفرم، مانند کوانتیزه‌سازی درون‌آموزشی (که حداقل و حداکثر مقادیر شناور را برای فعال‌سازی مدل و وزن‌ها را برای کوانتی‌سازی مدل استنتاج ردیابی می‌کند) که اندازه مدل را به میزان یک چهارم کاهش می‌دهد، برای ایجاد پایان استفاده می‌کنیم. مدل -to-end به نام ByteQRNN (در زیر نشان داده شده است). ابتدا، ما از یک عملیات ByteSplitter برای تقسیم رشته ورودی به یک جریان بایت استفاده می کنیم و آن را به یک جدول جاسازی کوچکتر که دارای اندازه واژگان 259 است (256 + 3 متا توکن اضافی) تغذیه می کنیم.

خروجی لایه تعبیه شده به لایه GBST تغذیه می‌شود، که مجهز به کوانتیزه‌سازی درون‌آموزشی است و نمایش‌های سطح بایت را با کارایی توکن‌سازی زیرکلمه ترکیب می‌کند و در عین حال امکان یادگیری سرتاسر زیرکلمه‌های نهفته را فراهم می‌کند. توالی‌های جریان بایت را با برشمردن و ترکیب طول بلوک‌های فرعی با امتیازات (محاسبه شده با یک لایه متراکم کوانتیزه) در هر موقعیت نشانه گام‌دار (یعنی در موقعیت‌های نشانه‌ای که در فواصل زمانی منظم انتخاب می‌شوند) نشانه‌گذاری می‌کنیم. سپس، جریان بایت را به طول توالی قابل مدیریت کاهش می دهیم و آن را به لایه رمزگذار تغذیه می کنیم.

خروجی از لایه GBST را می توان به یک طول دنباله کمتر نمونه برداری کرد تا محاسبات رمزگذار کارآمد را انجام دهد یا می تواند توسط یک رمزگذار مانند Funnel Transformer استفاده شود که طول پرس و جو را جمع می کند و محاسبات توجه به خود را برای ایجاد مدل ByteFunnelTransformer کاهش می دهد. رمزگذار در مدل end-to-end را می توان با هر لایه رمزگذار دیگری مانند Transformer از کتابخانه SeqFlowLite جایگزین کرد تا یک مدل ByteTransformer ایجاد کند.

نمودار یک مدل توالی انتها به انتها عمومی با استفاده از ورودی جریان بایت. مدل ByteQRNN از یک رمزگذار QRNN از کتابخانه SeqFlowLite استفاده می کند.

علاوه بر تعبیه‌های ورودی (یعنی خروجی از لایه جاسازی که در بالا توضیح داده شد)، ما یک گام فراتر می‌رویم تا یک مدل توالی به دنباله (seq2seq) موثر بسازیم. ما این کار را با استفاده از ByteQRNN و اضافه کردن یک مدل رمزگشای مبتنی بر ترانسفورماتور به همراه جستجوی پرتو کوانتیزه (یا کاوش درخت) انجام می دهیم. ماژول جستجوی پرتو کوانتیزه شده تأخیر استنتاج را هنگام تولید خروجی‌های رمزگشا با محاسبه محتمل‌ترین پرتوها (یعنی توالی‌های خروجی ممکن) با استفاده از مجموع لگاریتمی احتمالات قبلی و فعلی کاهش می‌دهد و پرتوهای بالای حاصل را برمی‌گرداند. در اینجا سیستم از یک فرمت عدد صحیح 8 بیتی (uint8) کارآمدتر در مقایسه با یک مدل معمولی با فرمت ممیز شناور تک دقیق (float32) استفاده می کند.

مدل ترانسفورماتور رمزگشا از یک زیرلایه توجه ادغام شده (MAtt) برای کاهش پیچیدگی خودتوجهی رمزگشا از درجه دوم به خطی استفاده می کند و در نتیجه تأخیر انتها به انتها را کاهش می دهد. برای هر مرحله رمزگشایی، MAtt از یک حافظه پنهان با اندازه ثابت برای خودتوجهی رمزگشا در مقایسه با افزایش اندازه حافظه پنهان یک رمزگشای ترانسفورماتور سنتی استفاده می کند. شکل زیر نشان می‌دهد که چگونه ماژول جستجوی پرتو با لایه رمزگشا برای تولید نشانه‌های خروجی روی دستگاه با استفاده از یک دستگاه لبه (مثلاً تلفن‌های همراه، تبلت‌ها و غیره) تعامل می‌کند.

مقایسه رمزگشایی سرور ابری و اجرای روی دستگاه (دستگاه لبه). ترک کرد: جستجوی پرتو سرور ابری از یک مدل رمزگشای مبتنی بر ترانسفورماتور با زمان درجه دوم در float32 استفاده می‌کند که اندازه حافظه پنهان برای هر مرحله رمزگشایی افزایش می‌یابد. درست: پیاده سازی دستگاه لبه از یک ماژول جستجوی پرتو کوانتیزه به همراه یک حافظه پنهان با اندازه ثابت و یک محاسبه زمان خطی خودتوجه استفاده می کند.

ارزیابی

پس از توسعه ByteQRNN، عملکرد آن را بر روی مجموعه داده civil_comments با استفاده از متریک ناحیه زیر منحنی (AUC) ارزیابی می‌کنیم و آن را با ByteQRNN و BERT از پیش آموزش‌دیده‌شده (در زیر نشان داده شده) مقایسه می‌کنیم. ما نشان می‌دهیم که ByteQRNN تنظیم‌شده کیفیت کلی را بهبود می‌بخشد و عملکرد آن را به مدل‌های BERT نزدیک‌تر می‌کند، علیرغم اینکه 300 برابر کوچک‌تر است. از آنجایی که مدل‌های SeqFlowLite از کوانتیزاسیون در آموزش پشتیبانی می‌کنند که اندازه مدل‌ها را یک چهارم کاهش می‌دهد، مدل‌های به‌دست‌آمده به خوبی برای دستگاه‌های کم‌محاسبه مقیاس می‌شوند. ما منابع داده چندزبانه را انتخاب کردیم که مربوط به کار برای پیش‌آموزش هر دو مدل BERT و جریان بایت بود تا به بهترین عملکرد ممکن دست یابیم.

مقایسه ByteQRNN با ByteQRNN و BERT دقیق تنظیم شده در مجموعه داده civil_comments.

نتیجه

در ادامه کار قبلی خود با pQRNN، مدل‌های جریان بایت را برای استفاده در دستگاه ارزیابی می‌کنیم تا پیش‌آموزش را فعال کنیم و در نتیجه عملکرد مدل را برای استقرار روی دستگاه بهبود دهیم. ما یک ارزیابی برای ByteQRNN با و بدون پیش‌آموزش ارائه می‌کنیم و نشان می‌دهیم که عملکرد ByteQRNN از پیش آموزش‌دیده با BERT قابل مقایسه است، علیرغم اینکه 300 برابر کوچکتر است. علاوه بر ByteQRNN، ما ByteTransformer و ByteFunnelTransformer را نیز منتشر می کنیم، دو مدلی که از رمزگذارهای مختلف استفاده می کنند، همراه با مدل رمزگشای توجه ادغام شده و درایور جستجوی پرتو برای اجرای استنتاج از طریق کتابخانه SeqFlowLite. امیدواریم این مدل ها منابع ارزشمندی را برای استقرار روی دستگاه در آینده در اختیار محققان و توسعه دهندگان محصول قرار دهند.

سپاسگزاریها

مایلیم از Khoa Trinh، Jeongwoo Ko، Peter Young و Yicheng Fan برای کمک به منبع باز و ارزیابی مدل تشکر کنیم. با تشکر از Prabhu Kaliamoorthi برای همه طوفان فکری و ایده. با تشکر از Vinh Tran، Jai Gupta و Yi Tay برای کمک آنها در مورد مدل های جریان بایت قبل از آموزش. با تشکر از Ruoxin Sang، Haoyu Zhang، Ce Zheng، Chuanhao Zhuge و Jieying Luo برای کمک به آموزش TPU. با تشکر فراوان از اریک وی، راوی کومار و رهبری Learn2Compress برای حمایت مالی از پروژه و حمایت و تشویق آنها. در پایان از تام اسمال برای فیگور متحرک استفاده شده در این پست تشکر می کنیم.