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

تاریخچه پیدایش
--------------

این تابع هزینه اولین بار سال ۲۰۰۹ توسط Weinberger و Saul معرفی شد. آن‌ها این معیار را به گونه‌ای آموزش دادند که k نزدیکترین داده‌های در همسایگی هم، همگی متعلق به یک کلاس باشند و در حداقل فاصله از هم قرار بگیرند و داده‌های کلاس‌های متفاوت در حداکثر فاصله از آن‌ها قرار بگیرند. این تابع هزینه، مستقیماً یک شبکه عصبی پیچشی عمیق را بهینه‌سازی می‌کند و بردارهای ویژگی را به گونه‌ای تولید می‌کند که تصاویر مشابه با یک تصویر نمونه (انگلیسی: Anchor sample)، در فاصله کمی از آن قرار بگیرد. تصاویر مشابه را نمونه‌های مثبت (انگلیسی: positive samples) و تصاویر متفاوت را نمونه‌های منفی (انگلیسی: negative samples) می‌نامند. برای مثال در یک مسئله تشخیص چهره، هویت هر فرد موجود در مجموعه آموزشی، به عنوان یک کلاس در نظر گرفته می‌شود و شبکه برای طبقه‌بندی و تشخیص صحیح تصاویر هر کلاس آموزش می‌بیند. شبکه آموزش دیده، به عنوان یک استخراج‌کننده ویژگی استفاده می‌شود. در نهایت، از یک معیار خاص، مانند فاصله بین بردارها، برای رده‌بندی ویژگی‌های استخراج‌شده انتخاب می‌شود.[2]

اهداف پیدایش
------------

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

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

از طرفی ما انسان‌ها قابلیتی به نام یادگیری با یکبار دیدن (انگلیسی: One-shot learning) داریم؛ مثلاً تنها با یکبار دیدن چهره یک نفر می‌توانیم چهره او را در ملاقات‌های بعدی نیز تشخیص دهیم. در هوش مصنوعی، طبقه‌بندی مبتنی بر این یادگیری تنها به یک نمونه آموزشی از هر کلاس احتیاج دارد.

در توابع هزینه سنتی مثل cross-entropy یا خطای میانگین مربعات، هدف پیش‌بینی مستقیم یک برچسب، یک مقدار یا مجموعه‌ای از مقادیر است. در توابع هزینه رتبه‌بندی کننده، هدف پیش‌بینی فاصله میان ورودی‌هاست. به این عمل، «یادگیری متریک» (انگلیسی: metric learning) گفته می‌شود. توابع هزینه رتبه‌بندی کننده اسامی مختلفی دارند ولی کار همه آن‌ها شبیه به همدیگر است. معمولاً برای آموزش آن‌ها از دو جفت تصویر (انگلیسی:pairwise) یا یک سه‌تایی (انگلیسی: triplet) از تصاویر استفاده می‌شود. در هر دو روش، فاصله میان بردارهای استخراج‌شده از تصاویر بررسی می‌شود. این تابع هزینه، با تولید نمایش‌های قدرتمند و قابل استناد از داده‌ها، کارایی خودش را در وظایف مختلف ثابت کرده است.[1] 

در توابع هزینه رتبه‌بندی کننده:

۱. ویژگی های تصویر ورودی استخراج می‌شود و بردار ویژگی آن تشکیل می‌شود.

۲. از یک معیار فاصله مانند فاصله اقلیدسی یا فاصله کسینوسی برای بررسی فاصله میان تصاویر استفاده می‌شود.

۳. در گام پایانی، استخراج‌کننده‌های ویژگی باید طوری آموزش ببیند که برای تصاویر شبیه بهم، بردارهای ویژگی مشابه و برای تصاویر غیرمشابه بردارهایی متفاوت و با فاصله بیشتر 

تولید کنند. توجه کنید که مقدار این بردارها برای ما اهمیتی ندارد و تنها فاصله میان آن‌ها حائز اهمیت است.

معماری شبکه
-----------

در خط لوله شکل بالا، ابتدا یک دسته کوچک از داده‌های آموزش نمونه‌برداری می‌شود که معمولاً شامل k کلاس و تعدادی نمونه از هر کلاس می‌شود. از یک شبکه عصبی عمیق برای یادگیری بردار ویژگی استفاده می‌شود. در مرحله سوم یک زیرمجموعه سه‌تایی از داده‌ها انتخاب می‌شود. در پایان، میزان خطا براساس تریپلت‌های انتخاب شده محاسبه می‌شود.ایده شبکه تریپلت از شبکه Siamese (انگلیسی: Siamese Network) گرفته شده است با این تفاوت که به جای ۲ شبکه عصبی پیش‌خور (انگلیسی: Feed-forward neural network) با معماری و وزن‌های کاملاً مشابه، در اینجا ۳ شبکه عصبی داریم. وزن‌های شبکه‌ها نیز بین یکدیگر به اشتراک گذاشته می‌شود. فاصله میان تصویر نمونه و جفت تصاویر مثبت و منفی، هر کدام تبدیل به بردارهایی مجزا می‌شود. 

  

معماری این شبکه، مسئله را به یک مسئله طبقه بندی ۲ کلاسه تبدیل می‌کند که هدف در آن، تصمیم گیری در 

خصوص این است که کدام یک از تصاویر x+ و x-  به کلاس مشابه با x تعلق دارد. به صورت کلی، هدف یادگیری یک بردار ویژگی معیار است که مشخص کند کدام تصویر به x نزدیک‌تر است. نزدیکی را می‌توان تعبیر دیگری از «داشتن برچسب مشترک» دانست. به عنوان مقایسه‌گر نیز یک تابع سافت‌مکس در خروجی هر یک از مقایسه‌گرهای شباهت تعبیه می‌شود. مشابه با شبکه‌های عصبی پیچشی سنتی، در آموزش آن‌ها از یک الگوریتم بهینه‌سازی نیز استفاده می‌شود. در پایان نیز از الگوریتم پس‌انتشار خطا (انگلیسی: back propagation) برای بروزرسانی مدل به صورت همزمان استفاده می‌شود. [2]

### معماری‌های محبوب

برای طراحی این شبکه‌ها از معماری‌های مختلفی استفاده می‌شود. کیفیت ویژگی‌های استخراج‌شده مستقیما روی دقت طبقه‌بندی اثر می‌گذارد. ساختارهای شبکه عمیق‌تر می‌توانند نگاشت‌های ویژگی با اطلاعات معنایی بیشتری را استخراج کنند. در ساخت یک شبکه تریپلت، می‌توان از شبکه‌های عصبی پیچشی (انگلیسی:Convolutional Neural Network)، شبکه‌های خود-رمزنگار (انگلیسی: Autoencoder) یا شبکه‌های بسیار عمیقی مانند AlexNet، ResNet و VGG استفاده کرد. برای تابع فعال‌سازی لایه پایانی نیز معمولا از تابع سافت‌مکس استفاده می‌شود. همچنین استفاده از معیار تنظیم L2 (انگلیسی: Regularization) نیز در این شبکه‌ها رایج است. [5]

طراحی یک شبکه تریپلت با معماری مشابه شبکه vgg

آموزش شبکه
----------

هدف یادگرفتن یک تابع شباهت S (x, x’) ناشی شده از یک معیار نرمال است. برای سه نمونه داده x، x1 و x2 برچسب‌ها به صورت مقایسه فاصله بین d(x, x1) و d(x, x2) خواهند بود. 

ما به دنبال یک بردار ویژگی معیار و یک تابع شباهت متناسب با شرایط مسئله هستیم. در این فرمول، x1 و x از یک کلاس خواهند بود و x و x2 به کلاس‌های مختلفی تعلق خواهند داشت و معمولاً مثال‌های پیچیده و دشوار را به عنوان جفت کنار هم قرار می‌دهند. x1 و x2 را می‌توان به صورت x+ و x- نیز نمایش داد. تمرکز ما روی یادگرفتن تابع شباهت برحسب یکی از معیارهای فاصله مانند اقلیدسی، کسینوسی و... است و معمولاً از یک شبکه عصبی عمیق انگلیسی:Deep Neural Networks) برای یادگیری استفاده می‌کنند.[2] 

در آموزش، یک تصویر نمونه با دو نمونه مثبت و منفی مقایسه خواهد شد. در یادگیری شبکه و بردارهای ویژگی استخراج شده به دنبال موارد زیر هستیم:

۱.  عدم شباهت کم میان تصویر نمونه و تصویر مثبت و فاصله کم بردار ویژگی آن‌ها

۲.  عدم شباهت زیاد میان تصویر نمونه و تصویر منفی و فاصله زیاد بردارهای ویژگی آن‌ها

ساختار یک شبکه تریپلت
خروجی تابع هزینه تریپلت می‌تواند سه حالت داشته باشد:

۱. برای تریپلت‌هایی که تشخیص تصاویر مشابه و غیر مشابه ساده باشد:

```
d(ra,rn)> d(ra,rp) + m 
```

نمونه منفی از قبل در فاصله مناسبی نسبت به تصویر اصلی قرار دارد. مقدار تابع هزینه صفر خواهد بود و پارامترها بروز نمی‌شوند.

۲. برای تریپلت‌هایی که تشخیص تصاویر مشابه و غیر مشابه دشوار باشد:

```
d(ra,rn) <d(ra,rp) + m 
```

نمونه منفی بسیار شبیه به تصویر اصلی است و نسبت به نمونه مثبت، در فاصله نزدیک‌تری به تصویر نمونه قرار دارد. مقدار تابع هزینه مثبت و بیشتر از حداقل فاصله بین آن‌ها خواهد بود.

۳.  برای تریپلت‌هایی که تشخیص تصاویر مشابه و غیر مشابه نسبتاً دشوار باشد:

```
d(ra,rp) <d(ra,rn) <d(ra,rp) + m 
```

فاصله تصویر نمونه و تصویر منفی اندکی بیشتر از فاصله تصویر نمونه و تصویر مثبت خواهد بود. مقدار تابع هزینه مثبت خواهد بود ولی مقدار آن بیشتر از حداقل فاصله بین دو بردار نخواهد شد.

{\displaystyle {\begin{aligned}{\mathcal {L}}\_{0}&=\sum \_{1}^{N}\left[d\_{0}^{ap}-d\_{0}^{an}+m\_{0}\right]\_{+}\\d\_{0}^{ap}&={\|\operatorname {f} \_{0}\left(x\_{i}^{a}\right)-\operatorname {f} \_{0}\left(x\_{i}^{p}\right)\|}\_{2}^{2}\\d\_{0}^{an}&={\|\operatorname {f} \_{0}\left(x\_{i}^{a}\right)-\operatorname {f} \_{0}\left(x\_{i}^{n}\right)\|}\_{2}^{2}\end{aligned}}}
در فرمول بالا، *dap*   و dan  فاصله اقلیدسی بین جفت‌های نمونه-مثبت و نمونه-منفی هستند. m0 فاصله‌ای است که باید میان *dap*   و dan  باشد. N نیز تعداد سه‌تایی‌های درون یک دسته آموزشی است. f0(xi) نیز نشان‌دهنده بردار ویژگی d بعدی xi است. در فرمول بالا یک زیرنگاشت صفر برای برای f، d و m نوشته شده که به ترتیب بردار ویژگی، فاصله دو بردار و حداقل فاصله تصویر نمونه و تصویر منفی اولیه را نشان می‌دهد. مقدار آن‌ها به مرور بروزرسانی خواهد شد.

### یادگیری مثال‌های دشوار

از پیمایش مثال‌های دشوار، به دفعات در آموزش شبکه‌های عمیق استفاده شده است. در آموزش شبکه، از دشوارترین مثال‌های مثبت و منفی برای ایجاد تریپلت‌ها استفاده می‌شود. این روش‌ها می‌توانند به صورت محلی یا سراسری عمل کنند؛ یعنی نمونه‌ها یا از کل مجموعه داده و یا از هر دسته انتخاب شوند.[3]

اساسی‌ترین بخش در آموزش تابع هزینه تریپلت، نمونه‌برداری دقیق و ایجاد سه‌تایی‌ها است. یک سه‌تایی از بخش‌های زیر تشکیل شده است:

· یک تصویر نمونه xa

·   یک نمونه مثبت  xp

·   یک نمونه منفی  xn

تابع هزینه تریپلت، به دنبال یادگیری یک بردار ویژگی است تا در فضای ویژگی، بردار تصویر نمونه به نمونه مثبت نزدیکتر باشد تا نمونه منفی.

{\displaystyle S\left(x,\ x\_{1}\right)>S\left(x,\ x\_{2}\right),\ \forall x,\ x\_{1},\ x\_{2}\ \in \mathbb {P} \ {\text{for which}}\ r\left(x,\ x\_{1}\right)>r\left(x,\ x\_{2}\right)}
در فرمول بالا x1 و x از یک کلاس خواهند بود و x  و x2 به کلاس‌های مختلفی تعلق خواهند داشت و معمولاً نمونه‌های پیچیده و دشوار را  به عنوان جفت کنار هم قرار می‌دهیم. x1 و x2 را می‌توان به صورت x+ و x- نیز نمایش داد. تمرکز ما روی یادگرفتن تابع شباهت برحسب یکی از معیارهای فاصله مانند اقلیدسی، کسینوسی و... است و معمولاً از یک شبکه عصبی عمیق برای یادگیری استفاده می‌کنند.

مثالی از کاربرد
---------------

روند یادگیری یک شبکه عصبی برای تشخیص چهره را در نظر بگیرید. الگوریتم طبقه‌بندی که برای کلاس‌بندی نمونه‌های قبلی آموزش دیده است، با ورود هر شخص جدید به پایگاه داده شبکه باید دوباره آموزش ببیند. اگر این مساله به جای مساله طبقه‌بندی، به صورت یک مساله‌ی یادگیری شباهت مطرح شود، دیگر نیازی به آموزش‌های مجدد همه شبکه نخواهد بود. در این جا، شبکه با استفاده از تابع هزینه مقایسه‌ای(انگلیسی: contrastive loss)، طوری آموزش دیده است که اگر تصویر متعلق به فرد شناخته شده‌ای باشد، یک فاصله‌ی کوچک را به عنوان خروجی بدهد و اگر تصویر متعلق به فرد ناشناسی باشد، این فاصله‌ی خروجی بزرگ باشد. البته اگر بخواهیم در خروجی نزدیک‌ترین تصویر به تصویر داده شده داده شود، باید علاوه بر محاسبه شباهت، قادر به رتبه‌بندی تصاویر نیز باشد و برای این کار می‌توان از یک تریپلت استفاده کرد.[4]

مقایسه و تعمیم‌ها
-----------------

در کارهای مرتبط به بینایی رایانه، مانند بازشناسایی، باور غالب این است که تابع هزینه تریپلت، نسبت به توابع هزینه دیگر که از یادگیری متریک به صورت جداگانه استفاده می‌کنند، ارزش کمتری دارد. الکساندر هرمانز، لوکاس بیر و بستین لیب، نشان دادند مدل‌هایی که از ابتدا با تریپلت آموزش دیده‌اند و مدل‌های از پیش آموزش دیده‌ای که با نسخه‌های خاصی از تابع هزینه تریپلت در حال انجام یادگیری عمیق متریک سراسری هستند، عملکرد بهتری از سایر روش‌های مطرح شده تا سال 2017  دارند.[4]

پیاده‌سازی
----------

### پایتون

جستارهای وابسته
---------------

* هوش مصنوعی
* یادگیری ماشین
* شبکه‌های عصبی
* پردازش تصاویر
* یادگیری عمیق
* یادگیری متریک عمیق

منابع
-----

1. Deep metric learning using Triplet network ,(2014) Elad Hoffer, Nir Ailon
2. Learning Incremental Triplet Margin for Person Re-identification, (2018)Yingying Zhang, Qiaoyong Zhong, Liang Ma, Di Xie, Shiliang Pu
3. Correcting the Triplet Selection Biasfor Triplet Loss, (2018)Baosheng Yu, Tongliang Liu, Mingming Gong, Changxing Ding, Dacheng Tao
4. Triplet loss Wikipedia
5. Training Convolutional Neural Networks with Multi-size Images and Triplet Loss for sensing classification(2020), Chanoquan Lu, Jin Wang, Jiamming Zhan