日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

漫谈度量学习(Distance Metric Learning)那些事儿

發布時間:2024/10/8 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 漫谈度量学习(Distance Metric Learning)那些事儿 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?作者 | 黃春喜

單位?| 香港科技大學

研究方向 | 智能交通


前言

上圖為 2018 年 4 月在杭州阿里中心聽 Michael Jordan 講座時所攝,他本人也是 distance metric learning 研究的開山鼻祖之一。當時只知大佬名氣、不知大佬風范,現如今讀起文章來,才覺得很幸運曾經有過的時空上的交集,希望以后能努力做好自己的研究。

在機器學習中,distance metric learning(也稱 metric learning,度量學習)是一個很典型的任務,通常與很多熟知的 metric-based methods(如 KNN、K-means 等)結合起來使用以實現分類或者聚類 ,效果通常非常不錯。很多機器學習方面的研究已經發現:如果 distance metric 學得足夠好,學出來的 metric 結合最簡單的 1NN 分類器其結果在很多任務上完全可以媲美很多很復雜的分類器,甚至在某些任務上還能達到 SOTA 的效果。此外,大部分 distance metric learning 的方法其數學模型和求解方法定義得都很清楚,讓人看起來很舒服,也給后續研究可能進行的拓展留足了想象空間。

在去年下半年有一小段時間中,我因為某些原因曾經短暫的接觸過 distance metric learning,當時是完全小白的狀態,但無奈需要解決手里的問題,試圖去檢索了很多資料和信息。這個學習過程很痛苦,主要是由于資料大多零零散散,也沒什么高質量的信息,看到的很多中文博客寫的并不友好,兜兜轉轉一圈還是不知道如何入手。雖然我現在因研究方向調整已經不再做這個方向了,但還是希望留下這篇文章:一是分享一下自己從初學者角度對 distance metric learning 的理解,供大家參考;二是把自己之前花了很多時間找的我個人覺得很有價值的資料和 references 分享給后來者,希望對感興趣的伙伴有幫助。

本文從傳統的 distance metric 開始介紹、聊聊為什么要從數據中學習出一個 metric 以及 distance metric learning 的簡單歷史,并且以 LMNN 為例談談其作為 distance metric learning 經典方法之一的特點,最后再簡單總結并把我之前覺得很有價值的資料和 references 附在文末分享給大家。相關資料和 references 在【Distance Metric Learning 優質資料分享】一節,感興趣的伙伴自行取用。

要想理解 distance metric learning,故事得從其中的“distance”開始講起。


Distance

所謂的距離,通常指的是兩個向量(空間中的兩個點)之間的距離。那么,如果兩個向量之間的距離很大意味著什么?距離很小又意味著什么?事實上,距離還可以從另外一個角度來理解:相似度。

在機器學習任務中,通常不同的向量代表著不同的樣本,換句話說如果兩個樣本之間的距離很小,我們可以理解為兩個樣本的相似度很高,反之如果兩個樣本之間距離很大,其之間的相似度就很低。如果是在分類任務中,借由距離和相似度的概念我們有一個很直觀的認識就是:相似度高(距離小)的樣本,其屬于同一類的概率會大于相似度低(距離大)的樣本屬于同一類的概率。KNN 無疑就是這種理念的最佳踐行者,其本身蘊含的思想就是基于距離來對樣本進行分類。這種思想也啟發、指導了很多 distance metric learning 方法的設計和實現。

提到距離,就必須說說距離度量的方式,也就是說:我們該如何計算兩個向量之間的距離?

1. 我們最常用最熟知的距離度量方式無非就是歐氏距離(Euclidean distance),兩個向量 和 之間的歐氏距離被定義為: 。因為與大家早在高中階段接觸的二維乃至三維向量距離計算方式相同,歐氏距離理解起來很容易。但是歐氏距離同樣也存在其最顯著的缺點:歐氏距離只能建立樣本間點對點的聯系、處理長度相等的數據。如果輸入數據長度不相等,或是兩個向量在時間軸上有偏移,那么歐氏距離的效果一般就會較差,這種情況下 Dynamic Time Warping(DTW)距離是一個很好的替代品,關于 DTW 距離之前寫過一篇文章,供大家參考:

https://zhuanlan.zhihu.com/p/389388258

2. 除了歐氏距離,常用的距離度量還有閔氏距離(Minkowski distance),其被定義為兩個向量的 p 階距離,可以寫成:,很明顯,歐氏距離就是閔氏距離中 時的特例。當 時,其為曼哈頓距離 (Manhattan distance),也就是對應點之間相減取絕對值的算法。

3. 另外一個常見的距離度量是由印度統計學家馬哈拉諾比斯(P. C. Mahalanobis)提出的,因此被稱為馬氏距離(Mahalanobis distance)。馬氏距離同樣也是定義在兩個向量上,這兩個樣本點來自同一個分布。馬氏距離可以寫為:,其中 是這個分布的協方差矩陣。顯然,當協方差矩陣 時,馬氏距離退化為歐氏距離。

在機器學習的眾多應用中,還有很多很多距離度量的方式,如:余弦相似度(利用向量夾角的余弦衡量兩個向量的距離)、Hamming distance(衡量兩個等長字符串之間的距離)、KL 散度 (衡量兩個概率分布間的距離)、JS 距離(基于 KL 散度的一個對稱的距離度量方式)等。此處空間有限不再細說,感興趣的伙伴可以自行了解~

很顯然,對于兩個樣本向量 和 ,如果我們利用不同的距離度量方式,得出的距離也就完全不同了。這同時也提醒我們,度量樣本間距離的方法對于我們的結果有著至關重要的作用。這其實也就是 distance metric learning 最核心的 motivation:希望從訓練數據中學習出一個最適合這個任務的 distance metric,以期達到最好的效果。


Distance metric learning 與 LMNN

distance metric learning 相關的研究大約始于二十年前,要認真算起來的話,其代表性的開山之作應該是 2002 年 Eric Xing 與 Andrew Ng、Michael Jordan 等人(真是每個名字都是大佬啊 hhh)合作在 NIPS 上發表的題為“Distance metric learning with application to clustering with side-information”的論文:

https://proceedings.neurips.cc/paper/2002/file/c3e4035af2a1cde9f21e1ae1951ac80b-Paper.pdf

這篇文章除了作為 distance metric learning 的開山之作以外,還創造性的將 metric learning 的過程構造成了一個凸優化問題,這給當時初生的 metric learning 的可靠性和穩定性提供了很大的保障和幫助。

在這篇文章中,他們定義 distance metric 并且從 side-information 中學習出 metric 的做法在今天其實可以被稱為 mahalanobis distance metric learning。顧名思義,其原因是直接借用了馬氏距離中度量距離的方法,其距離可寫成此形式:,其中 是一個對稱的半正定矩陣,而在馬氏距離中 是協方差矩陣的逆 。這種構造方法還可以從另外一個角度來理解,由于 是一個對稱的半正定矩陣,則有:

很顯然,這實際上就是對原樣本空間利用矩陣 進行線性投影后在新樣本空間內的歐氏距離!而 distance metric learning 的目標,就是學出這樣的矩陣 (或矩陣 )。到這里可能有伙伴會好奇,為什么不在原樣本空間用歐氏距離,一定要經過一個線性投影 呢?答案很簡單,在原樣本空間里我們無法通過歐氏距離來很好的區分不同類別的樣本,原樣本空間中不同類別的樣本混在一起,導致其歐氏距離很小,如果此時我們用一些 metric-based 的分類器效果就很差。

為了提高分類準確率,我們對原樣本空間做線性投影后,在新的空間可能不同類別的樣本就會分得比較開,此時用”歐氏距離“(投影后的新空間內)效果就會比較好。下圖一看便知:

▲ metric learning的幾何直覺

當然,不是所有的 distance metric 都是線性的,有線性的、也有非線性的,有監督的、也有非監督的。本文只為簡單介紹 distance metric learning 的概念,更多的內容留待感興趣的伙伴自由探索。在過去二十年 CS、AI 領域的研究中,涌現出了眾多 distance metric learning 的經典方法,例如 NCA、LMNN、ITML ?等,還有后續的一系列 online learning、linear similarity learning、nonlinear metric learning、multi-task metric learning、deep distance metric learning 等等。20 年前的方興未艾,20 年后的浩如煙海,大致就是如此了。

在此我以我個人比較熟悉的 LMNN 方法為例,給大家分享一下該方法中 metric learning 的思想。LMNN 是 Large Margin Nearest Neighbor的縮寫,原文最初發表于 2005 年的 NIPS,后來 2009 年在 JMLR 上補發了長文,邏輯很清晰、也很易懂,提綱挈領的同時又不失細節,算得上小半篇 review,強烈推薦:

https://www.jmlr.org/papers/volume10/weinberger09a/weinberger09a.pdf

LMNN 方法的核心思想也比較簡單:在 LMNN 之前的很多方法(如 Eric Xing 等人的 MMC)約束都很強,要求同類別樣本之間差距小而不同類別樣本之間差距大,這在實際中是很難實現的。而且結合最近鄰算法的思想,影響分類結果的就是最近的幾個樣本的類別,沒有必要去要求那么強的約束,我們只要實現利用 metric 把離每個樣本最近的幾個樣本都拉近到同類別,不就可以了嗎?LMNN 的思想可以用下圖來理解:

▲ Weinberger K Q, Saul L K. Distance metric learning for large margin nearest neighbor classification[J]. Journal of machine learning research, 2009, 10(2).

在左圖所示原空間中,以 樣本為例,離其最近的三個同類別樣本(target neighbors)形成的圈子中,有其他類別的樣本存在,這意味著如果在原空間使用歐氏距離結合 KNN 算法,容易受到所謂的入侵者(impostors)的影響。所以 LMNN 的核心思想就是通過學習一個 distance metric,使其所對應的線性投影矩陣投影到新空間后,最近的數個同類別樣本(target neighbors)們被拉得更近、而每個樣本的入侵者(impostors)都被推得更遠,以致最近的數個同類別樣本(target neighbors)圍成的圈與入侵者(impostors)的距離有一個邊界(margin)(如上面右圖所示)。這樣的話,經過 LMNN 學習到的 distance metric,采用 KNN 的算法來進行分類,就會有很好的效果了~

那么,LMNN 是如何實現這一推一拉的呢?這得益于 LMNN 算法中巧妙的 loss function設計。LMNN 算法的 loss function 分為兩個部分,一個部分負責拉近最近的數個同類別樣本(target neighbors),一部分負責推開每個樣本的入侵者(impostors)。

負責拉近的部分被構造為:

▲ j -> i 代表j是i的target neighbors

很顯然,這部分通過懲罰同類別樣本間的大距離達到拉近同類別樣本的效果。

負責推開的部分被構造為:

▲ j -> i 代表j是i的target neighbors

其中 代表標準的 hinge loss。如果 是 的 target neighbors,,那自然就不用推開了,此時這一項 loss 為 0;如果 是 的 impostors,,如果括號內大于 0,意味著在投影后的新空間中,仍然有 impostors 入侵到 margin 之內。所以此項 loss 通過懲罰括號內大于 0 的項(impostors 入侵進入 margin)來實現推開的 impostors 的功能。

最終這一推一拉利用一個參數 實現了平衡和調整:

以上就是關于 LMNN 思想的簡單介紹,當然學習 metric 的過程還需要一些構造優化問題并求解的過程,那又是另外一個故事了。事實上在眾多的 metric learning 方法中,很多都有相近的思想(拉近同類、區別異類),只是大家的 formulation 不同,衍生出了不同的工具和方法。感興趣的伙伴可以自行了解其他各種有趣的方法。


Distance metric learning 在工程應用中的實踐

前文提到,我自己短暫的花了一段時間嘗試了 distance metric learning 的學習和實踐,這里以我自己之前解決的小問題作為一個 toy example,跟大家分享一下在非 CS 的工程學科中 distance metric learning 的大致實踐過程。

為什么做:在智能制造的大背景下,隨著傳感器、控制、計算機等一系列技術的發展,各種過去無法被記錄的制造過程中的數據現在可以被各種各樣的傳感器記錄下來了,這給我們提供了很多數據驅動的制造過程分析和決策的機會,制造產品的質量預測與監控就是其中重要的一個分支。

過去傳統的質量控制大多都是 post-process 的,也就是說得等產品完成很多工序直到質檢工序時才被發現,而某些產品質量可能在其中某一個工序就出問題了,可這些有問題的產品依舊經過了后續的很多工序加工,這造成了很大的資源和成本浪費。所以我們需要一個 in-process 的質量監測工具幫助我們根據制造過程數據及時判斷出哪些產品可能是有問題的、及時發現并防止浪費。

做什么:在某個特殊的產品制造過程中,行業專家告訴我們制造過程中的某種數據(記為 )是跟產品的質量有重要聯系的。于是,我們借由傳感器收集到了多個樣本制造過程種每個樣本的 數據,根據現有制造產線后續的質檢工序,制造方為我們提供了這些樣本的真實標簽(記為 ,兩種:合格品 和不合格品 )。

這個問題中有兩個小的 challenges:由于制造過程中的隨機性,每個樣本的 數據其長度大多是不相等的;此外,我們收集數據的樣本中,樣本量較為有限,且合格品的數量遠大于不合格品的數量,比率大概在 20:1 左右,換句話說,這是個樣本量有限的不平衡數據集。而我們的目標就是根據收集到的 數據來構建一個預測產品質量是否合格(標簽 )的模型,這樣就可以針對每個制造過程中的新樣本根據收集到的過程數據實現 in-process 的質量預測和監控了。

怎么做:前期我做了其他方法的很多探索,就不在此一一贅述了,此處直接闡述利用 distance metric learning 的做法。在將樣本簡單劃分為 training set 和 test set 后,由于 distance metric learning 不能處理非等長的數據,我先隨機選取了一個樣本作為參考樣本利用 DTW 將其他所有樣本(包括 training set 和 test set)進行拉齊處理(這里有一個 trick:利用各種 MATLAB 或 python 內嵌的包確實可以根據 DTW 拉齊兩個不等長的樣本,但拉齊后的長度跟兩個樣本的原長度都不相等,所以我后面自己寫了一段代碼解決了),這樣就得到了等長的數據集。如下所示:

▲ 利用DTW拉齊兩個不等長樣本

嘗試過多種 metric learning 方法后,我最終使用了經典的 LMNN 方法在 training set 上學習了特定的 distance metric,并將其應用到 test set 上,結合 1NN 分類器最終輸出預測的樣本標簽 。由于樣本量有限,我對整個數據集做了 100 次 random split,最后取平均的 performance。以上就是我之前所做的對于不等長的數據集如何進行 distance metric learning 的基本思路。

但是當時我覺得 performance 還是不夠好,于是引入了另一個基于 DTW 拉齊處理的 trick:在拉齊過程中,我針對每一個 split 下的 training set 和 test set 利用多個樣本 作為參考樣本來進行拉齊,這樣經過 DTW 的處理,每一個 split 下我就有了 個不同長度的數據集,根據這 個不同長度的數據集可以用 metric?learning 學習出 個不同的 distance metric,再構建 個 1NN 分類器并將它們 ensembling 在一起根據 個分類結果利用 majority voting 的方法最終得出預測標簽。這一 trick 大大的幫助我在這一問題上提升了預測的? performance。

結果:在此我比較了三種方法:1、直接利用 DTW 距離結合 1NN 進行分類;2、先利用 DTW 拉齊、LMNN 學習 distance metric、1NN 分類;3、先利用 DTW 基于多個參考樣本拉齊、LMNN 學習多個 distance metrics、多個 1NN 分類最終 majority voting。結果如下:

▲ 三種方法的分類結果對比

在 accuracy 方面三種方法都很高,但這是由之前提到的不平衡數據所造成的,而且可以由 precision, recall, F1-score 三項很明顯的看出來:DTW+1NN 對于我們最關注的不合格品的分類準確度并不高。利用 distance metric learning 的確進一步改進了對不合格品的分類準確度,但最終引入的 ensembling 的 trick 幫助我們達到了整體大于 99.4% 的準確度,而且對不合格品的分類準確度超過了95%。

事實上,在解決這個問題的過程中,我嘗試了很多很多方法,也曾經試圖對 LMNN 的模型結構做更改,但效果都不好,最后還是老老實實把 distance metric learning 單純的當作工具來使用。沒能在理論方面做出啥貢獻確實汗顏,但我想這個 toy example 的用處也正是跟大家分享 distance metric learning 的用法和其中遇到的坑和可能的解決辦法,倒也恰如其分。請大佬們輕拍~


總結

在本文中,我從一個初學者的角度,結合 distance metric learning 的歷史、其中的經典算法 LMNN 和我自己的實踐,對 distance metric learning 作了簡單的介紹,希望能對感興趣的小伙伴有幫助。

此外,考慮到我之前學習 distance metric learning 過程中遇到的不系統、學習資料雜糅、信息良莠不齊的現象,在此把我認為入門和了解 distance metric learning 的極有價值的 references 和材料(包括 tutorials、codes 等)分享給大家,希望能對后來者的學習和研究有促進作用。同時,如果大家有跟 distance metric learning 相關的優質資料,歡迎評論區附上鏈接,我會持續不斷的更新。讓大家一起更高、更快、更強、也更團結呀!


Distance Metric Learning 優質資料分享(持續更新中)

本來準備了一個 reference list,但思前想后還是覺得不放為好,一是我自己讀的文獻有限、distance metric learning 又是一個很廣的 topic,盲目推薦可能會誤導大家;二是我覺得很多 review、tutorial 寫得非常好,而且他們在里面涵蓋了非常全面的文獻,有需要的伙伴可以根據自己的研究和學習需求去里面找最適合自己的內容。

以下是我認為比較優質的一些 review 和 materials,大家自取~

Review

1、Distance Metric Learning: A Comprehensive Survey:http://www.cs.cmu.edu/~./liuy/frame_survey_v2.pdf

2、A Survey on Metric Learning for Feature Vectors and Structured Data:https://link.zhihu.com/?target=https%3A//arxiv.org/pdf/1306.6709.pdf%3Fsource%3Dpost_page---------------------------

Materials

1、A TUTORIAL ON DISTANCE METRIC LEARNING: MATHEMATICAL FOUNDATIONS, ALGORITHMS,

EXPERIMENTAL ANALYSIS, PROSPECTS AND CHALLENGES:https://arxiv.org/pdf/1812.05944.pdf

2、 Distance metric learning for CV: ECCV 2016 tutorial:http://ivg.au.tsinghua.edu.cn/ECCV16_tutorial/

3、Tutorials on metric learning:http://researchers.lille.inria.fr/abellet/talks/metric_learning_tutorial_CIL.pdf

4、Metric learning and some distributed optimization:http://researchers.lille.inria.fr/abellet/talks/metric_learning_distributed_opt.pdf

5、ISMIR 2020 tutorials:https://github.com/bmcfee/ismir2020-metric-learning

6、Metric learning for image similarity search:https://keras.io/examples/vision/metric_learning/

Codes

Python:metric-learn

http://contrib.scikit-learn.org/metric-learn/

https://jmlr.csail.mit.edu/papers/volume21/19-678/19-678.pdf

Python:pytorch metric learning

https://kevinmusgrave.github.io/pytorch-metric-learning/

https://libraries.io/pypi/pytorch-metric-learning

MATLAB:

https://www.cs.cmu.edu/~liuy/distlearn.htm

特別鳴謝

感謝 TCCI 天橋腦科學研究院對于 PaperWeekly 的支持。TCCI 關注大腦探知、大腦功能和大腦健康。

更多閱讀

?

#投 稿?通 道#

?讓你的文字被更多人看到?

如何才能讓更多的優質內容以更短路徑到達讀者群體,縮短讀者尋找優質內容的成本呢?答案就是:你不認識的人。

總有一些你不認識的人,知道你想知道的東西。PaperWeekly 或許可以成為一座橋梁,促使不同背景、不同方向的學者和學術靈感相互碰撞,迸發出更多的可能性。?

PaperWeekly 鼓勵高校實驗室或個人,在我們的平臺上分享各類優質內容,可以是最新論文解讀,也可以是學術熱點剖析科研心得競賽經驗講解等。我們的目的只有一個,讓知識真正流動起來。

📝?稿件基本要求:

? 文章確系個人原創作品,未曾在公開渠道發表,如為其他平臺已發表或待發表的文章,請明確標注?

? 稿件建議以?markdown?格式撰寫,文中配圖以附件形式發送,要求圖片清晰,無版權問題

? PaperWeekly 尊重原作者署名權,并將為每篇被采納的原創首發稿件,提供業內具有競爭力稿酬,具體依據文章閱讀量和文章質量階梯制結算

📬?投稿通道:

? 投稿郵箱:hr@paperweekly.site?

? 來稿請備注即時聯系方式(微信),以便我們在稿件選用的第一時間聯系作者

? 您也可以直接添加小編微信(pwbot02)快速投稿,備注:姓名-投稿

△長按添加PaperWeekly小編

🔍

現在,在「知乎」也能找到我們了

進入知乎首頁搜索「PaperWeekly」

點擊「關注」訂閱我們的專欄吧

·

總結

以上是生活随笔為你收集整理的漫谈度量学习(Distance Metric Learning)那些事儿的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。