機(jī)器學(xué)習(xí)服務(wù)提取圖片的特征向量">使用SAP Leonardo上的機(jī)器學(xué)習(xí)服務(wù)提取圖片的特征向量
862
2025-03-31
前言
本文介紹稀疏矢量、數(shù)字矢量、嵌套(也可以叫嵌入)。
一、協(xié)同過濾
協(xié)同過濾是一項(xiàng)可以預(yù)測(cè)用戶興趣的任務(wù)。一影片推薦的任務(wù)為例,假設(shè)有100萬個(gè)用戶,以及每位用戶觀看過的列表,其中可供觀看的影片共有50萬部。目標(biāo)是向用戶推薦影片。
要解決這個(gè)問題,我們需要使用某種方法來確定哪些影片是相似的。我們可以通過將影片嵌套到低維空間,是的相似的影片彼此鄰近,倆實(shí)現(xiàn)這個(gè)目標(biāo)。
在介紹如果學(xué)習(xí)嵌套之前,我們先來了解一下,我們希望嵌套具備的特質(zhì)類型,以及我們將如何表示訓(xùn)練數(shù)據(jù)以供學(xué)習(xí)嵌套。
在一維數(shù)軸上排列影片
為了更直觀地了解嵌套過程,下面列舉了一些數(shù)據(jù);試著在一維數(shù)軸上排列以下影片,讓越相關(guān)的影片考得越近。
一個(gè)可行(但極不完善)的解決方案:把所以影片一行排列
雖然中嵌套有助于捕獲影片的適宜觀賞年齡段,但在推薦影片時(shí)還需要考慮影片的許多其它方面。我們進(jìn)一步分析此示例,在添加一個(gè)嵌套維度。
在二維空間中排列影片
使用這種二維嵌套,我們可以定義影片之間的距離,從而是得在適宜兒童或成人的相近程度上影片,以及屬于大片或藝術(shù)影片的程度上相近的影片,位于相近的位置。當(dāng)然,這是影片諸多重要特征中的兩個(gè)。
簡(jiǎn)單來說,我們所做的是將這些影片映射到一個(gè)嵌套空間,其中的每個(gè)字詞都有一組二維坐標(biāo)來表示。例如,在這個(gè)空間中,《怪物史菜克》映射到了(-1.0 , 0.95);而《藍(lán)》映射到了(0.65 , -0.2)。
通常情況下,在學(xué)習(xí)d維嵌套時(shí),每部影片都由d個(gè)實(shí)值數(shù)字表示,其中每個(gè)數(shù)字都分別表示在一個(gè)維度中的坐標(biāo)。
在此示例中,我們?yōu)槊總€(gè)維度指定了名稱。在學(xué)習(xí)嵌套時(shí),每個(gè)維度的學(xué)習(xí)跟它們的名字無法。有時(shí)我們可以查看嵌套并為維度賦予語義,但有時(shí)則無法做到這一點(diǎn)。
通常,每個(gè)此類維度都稱為一個(gè)潛在維度,因?yàn)樗淼奶卣鳑]有明確顯示在數(shù)據(jù)中,而是需要根據(jù)數(shù)據(jù)推斷得出。
最終,真正有意義的是嵌套空間中各個(gè)影片之間的距離,而不是單個(gè)影片在任意指定維度上的坐標(biāo)。
參考:https://developers.google.cn/machine-learning/crash-course/embeddings/motivation-from-collaborative-filtering
二、分類輸入數(shù)據(jù)
分類數(shù)據(jù)是指用于表示一組有限選項(xiàng)中的,一個(gè)或多個(gè)離散項(xiàng)的輸入特征。例如,它可以是某用戶觀看過的一組影片,某文檔中使用的一系列單詞,或某人從事的職業(yè)。
分類數(shù)據(jù)的最高效表示方式是使用稀疏張量(一種含有極少非零元素的張量)。例如,如果要構(gòu)建一個(gè)影片推薦模型,可以為每部的影片分別分配一個(gè)唯一的ID,然后通過用戶已觀看影片的稀疏張量來表示每位用戶,如圖下圖所示。
在上圖中,每行都是一個(gè)樣本,這個(gè)樣本顯示用戶的影片觀看記錄;上圖以稀疏張量的形式表示,因?yàn)槊總€(gè)用戶只會(huì)觀看所有可能的影片中的一小部分。
根據(jù)影片圖標(biāo)上方所示的索引,最后一行對(duì)應(yīng)于稀疏張量[1,3,999999]。
類似地,我們還可以將字詞、句子和文檔表示為稀疏矢量;在這種情況下,詞匯表內(nèi)每個(gè)字詞所扮演的角色類似于推薦示例中的影片。
三、稀疏矢量 表示為 數(shù)字矢量
為了能夠在機(jī)器學(xué)習(xí)系統(tǒng)中使用這類表示法,我們需要將每個(gè)稀疏矢量表示為數(shù)字矢量,從而使語義上相識(shí)的項(xiàng)(影片或字詞),在矢量空間中具有相似的距離。
但如何將字詞的稀疏矢量表示為數(shù)字矢量呢?
最簡(jiǎn)單的方法是:
【1】定義一個(gè)巨型輸入層,并在其中為詞匯表的每個(gè)字詞設(shè)定一個(gè)節(jié)點(diǎn),或者只是為數(shù)據(jù)中出現(xiàn)的每個(gè)字詞設(shè)定一個(gè)節(jié)點(diǎn)。
如果我們的數(shù)據(jù)中出現(xiàn)了50萬個(gè)獨(dú)一無二的單詞,可以使用長(zhǎng)度為50萬的矢量來表示每個(gè)單詞,將每個(gè)字詞分配到相應(yīng)矢量中對(duì)應(yīng)的索引位置。
如果為“馬”分配的索引是1247,當(dāng)“馬”輸入到網(wǎng)絡(luò)中,可以將第1247個(gè)輸入節(jié)點(diǎn)設(shè)成1,其余節(jié)點(diǎn)設(shè)成0。這種表示法稱為獨(dú)熱編碼(one-hot encodering),因?yàn)橹挥幸粋€(gè)索引具有非零值。
【2】更常見的是,使用一個(gè)包含各個(gè)單詞在大塊文本中出現(xiàn)次數(shù)的向量。這杯稱為“詞袋”(bag of words)表示法。在一個(gè)詞袋矢量中,50萬個(gè)節(jié)點(diǎn)中的若干個(gè)節(jié)點(diǎn)將具有非零值。
不過,無論我們?nèi)绾未_定非零值,若將節(jié)點(diǎn)與字詞一一對(duì)應(yīng),我們得到的輸入矢量就會(huì)比較稀疏:矢量很大,但非零值相對(duì)較少。
四、稀疏表示法存在的問題
稀疏表示法會(huì)使模型很難高效地學(xué)習(xí)。
4.1 網(wǎng)絡(luò)規(guī)模
巨型輸入矢量意味著神經(jīng)網(wǎng)絡(luò)的對(duì)應(yīng)權(quán)重?cái)?shù)目會(huì)機(jī)器龐大。
如果我們的詞匯表找那個(gè)有M個(gè)字詞,而神經(jīng)網(wǎng)絡(luò)輸入層上方的第一層有N個(gè)節(jié)點(diǎn),需要為該層訓(xùn)練MxN個(gè)權(quán)重。權(quán)重?cái)?shù)目過大會(huì)進(jìn)一步引發(fā)以下問題:
數(shù)據(jù)量:模型中的權(quán)重越多,高效訓(xùn)練所需的數(shù)據(jù)就越多。
計(jì)算量:權(quán)重越多,訓(xùn)練和使用模型所需的計(jì)算就越多。這很容易就會(huì)超出硬件的能力范圍。
4.2 矢量之間缺乏有用意義的聯(lián)系
如果將RGB通道的像素值輸入到圖片分類器中,分析“鄰近”值是可行的。不過是從語義上來看,還是從矢量之間的幾何距離來看,紅藍(lán)色與純藍(lán)色都是鄰近對(duì)的。
不過,對(duì)于在索引1247處設(shè)為1,來表示“馬”的矢量而言;如果說它在索引238處設(shè)為1,來表示“電視機(jī)”的矢量不夠鄰近;那么它與在索引50430處設(shè)為1,來說表示“羚羊”的矢量依然。
4.3 解決方案:嵌套
上述問題的解決方案是使用嵌套,也就是將大型稀疏矢量映射到一個(gè)保留語義關(guān)系的低維空間。
五、轉(zhuǎn)換到低維空間
背景
要解決稀疏輸入數(shù)據(jù)的核心問題,我們可以將高維度數(shù)據(jù)映射待低維度空間。
分析
即便是小型多維空間,也能自由地將語義上相似的項(xiàng)歸到一起,并將相異項(xiàng)分開。
矢量空間中的位置(距離和方向)可以良好的嵌套中的語義進(jìn)行編碼。
例如,下面的真實(shí)嵌套可視化圖展示的幾何關(guān)系圖捕獲了國家與首都之間的語義關(guān)系。
嵌套可以產(chǎn)生精彩的模擬;借助這種有意義的空間,機(jī)器學(xué)習(xí)系統(tǒng)能夠檢測(cè)出對(duì)學(xué)習(xí)任務(wù)可能有幫助的模式。
收縮網(wǎng)絡(luò)
盡管我們需要足夠的維度來編碼豐富的語義關(guān)系,但我們也需要足夠小的嵌套空間來更快速地訓(xùn)練我們的系統(tǒng)。
使用嵌套的量級(jí)大致有數(shù)百個(gè)維度,這可能比我們?cè)谧匀徽Z言任務(wù)中使用的詞匯規(guī)模要小好幾個(gè)數(shù)量級(jí)。
嵌套充當(dāng)查詢表
嵌套是一個(gè)矩陣,每列表示我們?cè)~匯中一項(xiàng)所對(duì)應(yīng)的矢量。要獲得某個(gè)詞匯項(xiàng)的密集矢量,可以檢索該項(xiàng)所對(duì)應(yīng)的列。
但是,如何轉(zhuǎn)換字詞矢量的稀疏包呢?
要獲得表示多個(gè)詞匯項(xiàng);例如,一句或一段中的所有字詞,的稀疏矢量的密集矢量,可以檢索各項(xiàng)的嵌套,然后將它們相加。
稀疏矢量包含詞匯項(xiàng)的計(jì)數(shù)?
如果稀疏矢量包含詞匯項(xiàng)的計(jì)數(shù),則可以將每項(xiàng)嵌套與其對(duì)應(yīng)項(xiàng)的計(jì)算相乘,然后再求和。
嵌套查詢充當(dāng)矩陣乘法
查詢、乘法和加法程序等效于矩陣乘法。假設(shè)有一個(gè)1xN的稀疏表示S和一個(gè)NxM的嵌套表E,矩陣乘法SxE可以得出密集矢量1xM。
但如果獲取E呢?下一節(jié)介紹如何獲取嵌套。
參考:https://developers.google.cn/machine-learning/crash-course/embeddings/translating-to-a-lower-dimensional-space
六、獲取嵌套
我們可以通過多種方式來獲取嵌套,包括Google研發(fā)的一流算法。
6.1 標(biāo)準(zhǔn)降維技術(shù)
目前有很多在低維空間?捕獲?高維空間重要結(jié)構(gòu)?的數(shù)學(xué)技術(shù)。理論上,這些技術(shù)都可以用來創(chuàng)建于機(jī)器學(xué)習(xí)系統(tǒng)的嵌套。
例如,主成分分析(PCA)已用于創(chuàng)建字詞嵌套。在給定一組實(shí)例的情況下,例如字詞矢量包,PCA會(huì)嘗試查找高度相關(guān)且可以合并的維度。
6.2?Word2vec
簡(jiǎn)介
Word2Vec 是 Google 為了訓(xùn)練字詞嵌套而研發(fā)的一種算法。
原理
Word2vec基于分布假設(shè),將語義上相似的字詞?映射到 幾何圖形上鄰近的嵌套矢量。
分布假設(shè),是指經(jīng)常具有相同鄰字詞的字詞,往往在語義上相似。簡(jiǎn)單來說,就是分布相互鄰近的字詞,往往語義也相似。
例如,“狗”和“貓”這兩個(gè)詞經(jīng)常靠近“獸醫(yī)”一詞,這就可以說明這兩個(gè)字詞在語義上相似。
結(jié)構(gòu)
Word2Vec 通過訓(xùn)練神經(jīng)網(wǎng)絡(luò)來區(qū)分,實(shí)際共同出現(xiàn)的多組字詞與隨機(jī)出現(xiàn)在一起的字詞,從而充分利用此類上下文信息。
輸入層采用一種稀疏表示法用于,組合一個(gè)目標(biāo)字詞 與一個(gè)或多個(gè)上下文字詞。這一輸入層會(huì)連接到一個(gè)較小的隱藏層。
在訓(xùn)練模型后,我們得到的是一組嵌套,借助將輸入層連接到隱藏層的權(quán)重;可以將字詞的稀疏表示映射到小型矢量。這類嵌套可在其他分類中重復(fù)使用。
6.3 將嵌套訓(xùn)練 作為 大型模型的一部分
簡(jiǎn)介
我們可以將 嵌套 作為目標(biāo)任務(wù)的神經(jīng)網(wǎng)絡(luò)的一部分,然后進(jìn)行學(xué)習(xí)訓(xùn)練。通過這個(gè)方法,可以為自己的特定系統(tǒng)量身定制嵌套,不過耗費(fèi)的時(shí)間可能比單獨(dú)訓(xùn)練嵌套的時(shí)間長(zhǎng)。
應(yīng)用
一般來說,當(dāng)我們有稀疏數(shù)據(jù)時(shí),可以創(chuàng)建一個(gè)嵌套單元。
或者當(dāng)我們想要嵌套的密集數(shù)據(jù)時(shí),也可以創(chuàng)建一個(gè)嵌套單元。
這個(gè)嵌套單元其實(shí)是大小為d的一個(gè)特殊類型的隱藏單元;此嵌套層可與任何其它特征和隱藏層組合。和任何DNN中一樣,最終層將是要進(jìn)行優(yōu)化的損失函數(shù)。
案例1
假設(shè)我們正在執(zhí)行協(xié)同過濾,目標(biāo)是根據(jù)其他用戶的興趣,預(yù)測(cè)某位用戶的興趣。
我們可以將這個(gè)問題作為監(jiān)督學(xué)習(xí)問題進(jìn)行建模,具體做法是隨機(jī)選擇用戶看過的一小部分影片作為正類標(biāo)簽,然后再優(yōu)化Softmax損失。
根據(jù)協(xié)同過濾數(shù)據(jù)學(xué)習(xí)影片嵌套的DNN架構(gòu)示例:
案例2
如果想在DNN中針對(duì)房地產(chǎn)廣告詞,創(chuàng)建嵌套層來預(yù)測(cè)房?jī)r(jià),則可以將訓(xùn)練數(shù)據(jù)中的已知房屋價(jià)用作標(biāo)簽來優(yōu)化來L2損失。
在學(xué)習(xí)d維嵌套時(shí),每一項(xiàng)都會(huì)映射到d為空間中的一個(gè)點(diǎn),這樣相似項(xiàng)就會(huì)在該空間內(nèi)彼此鄰近。
嵌套層權(quán)重的幾何視圖:
上圖說明了在嵌套層中學(xué)到的權(quán)重與幾何視圖之間的關(guān)系;輸入節(jié)點(diǎn)與d維嵌套層中的節(jié)點(diǎn)之間的邊的權(quán)重,對(duì)應(yīng)于d維坐標(biāo)軸中每一維的坐標(biāo)值。
比如,d = 3,把每一項(xiàng),映射到3位空間匯總的一個(gè)點(diǎn),比如是(0.9,0.2,0.4)。
參考:https://developers.google.cn/machine-learning/crash-course/embeddings/obtaining-embeddings
機(jī)器學(xué)習(xí) 深度學(xué)習(xí)
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。