The case of learned index structures論文閱讀(二)

The case of learned index structures論文閱讀(二)

鏈接:https://pan.baidu.com/s/1L65BK2vZ_5qEny04bfHPoA 
提取碼:z98n

學習索引結構的實例

 

3.6訓練

        雖然訓練(即加載)時間不是本文的重點,但應該指出,我們所有的模型,淺NNs甚至簡單的線性/多變量回歸模型,訓練相對較快。 簡單NNs可以利用隨機梯度下降進行有效的訓練,並且可以在隨機數據上以較少步數的速度收斂,而線性多變量模型(如0層NN)則存在一個閉式解,並且可以在排序數據上以一步的速度進行訓練。因此,對於200M記錄的訓練,一個簡單的RMI索引不會花費超過幾秒的時間(當然,這取決於執行了多少自動調諧);神經網絡可以根據每個模型的分鐘順序進行訓練,這取決於複雜程度。還要注意的是,在整個數據上訓練頂級模型通常是不必要的,因爲這些模型往往在對整個隨機數據進行一次掃描之前就收斂了。這在一定程度上是因爲我們使用簡單的模型,不太關心最後幾個數字點的精度,因爲它對索引性能的影響很小。最後,關於改進學習時間的研究[27,72]在我們的背景下得到了應用,我們期望在這個方向上有很多未來的研究。

3.7結果

        我們在幾個真實的和合成的數據集上對學習範圍指數的空間和速度進行了評估,並與其他讀取優化的指數結構進行了比較。

3.7.1整數數據集

        【實驗方式及數據集】作爲第一個實驗,我們在三個數據集上比較了 使用兩階段RMI模型和不同的第二階段大小(10k、50k、100k和200k)學習索引  和具有不同頁面大小的讀優化b。對於數據,我們使用了2個真實的數據集,(1)Weblogs和(2)Maps[56],(3)一個合成數據集Lognormal。Weblogs數據集包含2億個日誌條目,用於數年內對一個主要大學網站的每個請求。我們使用唯一的請求時間戳作爲索引鍵。這個數據集對於學習型索引來說幾乎是一個最壞的情況,因爲它包含了非常複雜的時間模式,這些時間模式是由課程安排、週末、假期、午休、部門活動、學期休息等引起的,衆所周知,這些時間模式很難學習。對於地圖數據集,我們將全球用戶維護的特徵(如道路、博物館、咖啡店)的經度編入索引。不出所料,位置的經度是相對線性的,並且比Weblogs數據集具有更少的不規則性。最後,爲了測試索引在重尾分佈上的工作方式,我們生成了一個190M個唯一值的合成數據集,這些值從μ=0和σ=2的對數正態分佈中採樣。這些值被放大爲高達1B的整數。這些數據當然是高度非線性的,這使得使用神經網絡學習CDF更加困難。對於所有的B樹實驗,我們使用64位key和64位有效負載/值。

        【實驗基準及優化】至於我們的基準,我們使用了一個生產級質量的B-Tree實現,與stx::B Tree類似,但具有進一步的緩存線優化、密集頁面(即填充因子爲100%)和非常有競爭力的性能。爲了優化兩級學習索引,我們在神經網絡上使用了簡單的網格搜索,它有0到2個隱藏層,層寬度從4到32個節點。一般來說,我們發現在第一階段使用一個簡單的(0個隱藏層)到半複雜的(2個隱藏層和8-16寬)模型效果最好。對於第二階段,簡單的線性模型具有最好的性能。這並不奇怪,因爲在最後一英里,往往不值得執行復雜的模型,線性模型可以學習的最佳。

        學習索引與B樹性能比較:主要結果如圖4所示。注意,B-樹的頁面大小表示每頁的鍵數,而不是字節大小,字節實際上更大。作爲主要的度量標準,我們以MB爲單位顯示大小,以納秒爲單位顯示總查找時間,以納秒爲單位顯示執行模型(B樹遍歷或ML模型)的時間,並與paranthesis中的總時間進行百分比比較。此外,作爲大小和查找列的一部分,我們在括號中顯示了與頁面大小爲128的B樹相比的速度和空間節省。我們選擇128頁作爲固定的參考點,因爲它爲B樹提供了最佳的查找性能(注意,通過完全沒有索引,總是很容易以犧牲查找性能爲代價節省空間)。speedup和size列中的顏色編碼表示索引相對於參考點的快慢成都(較大或較小)。

        可以看出,學習型索引在幾乎所有配置中都佔據了B樹索引的主導地位,它的速度高達1.5-3倍,同時又小了兩個數量級。當然,B-樹可以進一步壓縮,但要花費CPU時間進行解壓縮。然而,這些優化大多是正交的,並且對神經網絡同樣適用(如果不是更多的話)。例如,可以使用4位或8位整數而不是32位或64位浮點值來表示模型參數(稱爲量化的過程)來壓縮神經網絡。這種壓縮級別可以爲學習的索引釋放額外的增益。

        毫不奇怪,第二階段的規模大小對索引規模和查找性能有着顯著的影響。在第二階段使用10000個或更多的模型對於第2.1節中的分析來說尤其令人印象深刻,因爲它表明我們的第一階段模型可以比B樹中的單個節點在精度上有更大的提升。最後,我們沒有報告混合模型或其他搜索技術比二進制搜索這些數據集,因爲它們沒有提供顯著的好處。

        學習索引與備選基線比較:除了針對我們的已讀優化B-樹對學習索引進行詳細評估外,我們還在公平條件下將學習索引與其他備選基線(包括第三方實現)進行了比較。在下面,我們將討論一些備選基線,並在適當的情況下將它們與學習的索引進行比較:

        直方圖:B-樹近似於底層數據分佈的CDF。一個明顯的問題是直方圖是否可以用作CDF模型。原則上,答案是肯定的,但要實現快速數據訪問,直方圖必須是CDF的低誤差近似值。通常這需要大量的bucket,這使得搜索直方圖本身非常昂貴。如果bucket具有不同的bucket邊界以有效地處理數據傾斜,因此只有少數bucket是空的或太滿的,那麼這一點尤其正確。這個問題的明顯解決方案將產生一個B-樹,因此直方圖不再進一步討論。

        查找表:B樹的一個簡單替代方法是(分層)查找表。查找表通常具有固定的大小和結構(例如,每個插槽指向另一個64個插槽)。查找表的優點是,由於其固定的大小,可以使用AVX指令對其進行高度優化。我們包含了一個與三階段查找表的比較,三階段查找表是通過獲取每個第64個鍵並將其放入一個包含填充的數組中,使其成爲64的倍數來構造的。然後我們在數組中重複這個過程一次,不加填充,總共創建了兩個數組。爲了查找一個鍵,我們在最上面的表上使用二進制搜索,然後對第二個表和數據本身進行VX優化的無分支掃描[14]。與其他方法相比,此配置導致最快的查找時間(例如,在頂層使用掃描,或在第二個數組或數據上使用二進制搜索)。

        FAST:FAST[44]是一種高度SIMD優化的數據結構。我們使用[47]中的代碼進行比較。但是,需要注意的是,FAST總是需要以2的冪來分配內存,以使用無分支SIMD指令,這可能會導致更大的索引。

        固定大小B-樹和插值搜索:最後,正如最近一篇博客文章[1]中所建議的,我們創建了一個固定高度B-樹和插值搜索。設置了B樹的高度,使得樹的總大小爲1.5MB,與我們學習的模型類似。

        無開銷學習索引:對於我們的學習索引,我們使用了兩階段的RMI索引,頂部是多元線性迴歸模型,底部是簡單線性模型。我們對top模型使用簡單的自動特徵工程,通過自動創建和選擇key、log(key)、key2等形式的特徵。多元線性迴歸是NN的一種有趣的替代方法,因爲它特別適合只需少量操作就能擬合非線性模式。此外,我們在基準測試框架之外實現了學習型索引,以確保公平的比較。

        爲了進行比較,我們使用了Lognormal數據和一個8字節指針的有效負載。結果如圖5所示。從公平條件下的數據集可以看出,學習索引在節省大量內存的同時提供了最佳的總體性能。需要注意的是,由於對齊要求,快速索引很大。

        雖然結果是非常有希望的,但我們絕不聲稱學習索引永遠是大小或速度方面的最佳選擇。相反,學習過的索引提供了一種思考索引的新方法,需要更多的研究來充分理解其含義。

3.7.2字符串數據集

        我們還創建了一個超過1000萬個大型web索引的非連續文檔id的二級索引,作爲Google實際產品的一部分,用於測試學習到的索引如何在字符串上執行。基於字符串的文檔id數據集的結果如圖6所示,其中現在還包括混合模型。此外,我們在表中包含了我們最好的模型,這是一個帶有四元搜索的非混合RMI模型索引,名爲“learn QS“(表格底部)。所有RMI索引在第二階段使用10000個模型,對於混合索引,我們使用兩個閾值128和64作爲模型在替換爲B樹之前的最大允許絕對誤差。

        【圖6解釋說明】可以看出,對於字符串,學習索引的速度比B-樹的速度要慢得多。部分原因是模型執行成本相對較高,GPU/TPU可以解決這個問題。此外,對字符串的搜索要昂貴得多,因此更高的精度通常會帶來回報;混合索引(通過B樹替換性能不佳的模型)有助於提高性能的原因。

        由於搜索的成本,不同的搜索策略會產生更大的差異。例如,具有1-隱藏層和有偏二值搜索的NN的搜索時間是1102ns,如圖6所示。相比之下,我們使用相同模型的有偏四元搜索只需要658ns,這是一個顯著的改進。偏倚搜索和四元搜索之所以表現得更好,是因爲它們考慮了模型誤差。

4點索引

        除了範圍索引之外,用於點查找的Hash-maps散列映射在DBMS中也起着類似的重要作用。概念上的哈希映射使用哈希函數來確定將鍵映射到數組中的位置(參見圖7(a))。任何有效的散列映射實現的關鍵挑戰是防止太多不同的鍵被映射到散列映射內的同一位置,以下稱爲衝突。例如,假設100M記錄和100M哈希映射大小,對於一致隨機化key的哈希函數,可以類似於birthday悖論導出預期衝突的數量,並且預期衝突的數量大約爲33%或3300萬個時隙。對於這些衝突中的每一個,哈希映射體系結構都需要處理這些衝突。例如,單獨的鏈接散列映射將創建一個鏈接列表來處理衝突(參見圖7(a))。

        然而,存在許多替代方法,包括二次探測、使用具有多個時隙的桶、甚至同時使用多個散列函數(例如,如布穀鳥散列[57]所做的那樣)。然而,不管哈希映射體系結構如何,衝突都會對性能和/或存儲需求產生重大影響,機器學習模型可能提供一種減少衝突數量的替代方法。雖然將學習模型作爲散列函數的想法並不新鮮,但現有的技術並沒有利用底層數據分佈的優勢。例如,各種完美的散列技術[26]也試圖避免衝突,但作爲散列函數一部分使用的數據結構隨着數據大小而增長;屬性學習模型可能沒有(回想一下,索引1到100M之間的所有鍵的示例)。據我們所知,如果有可能學習能夠產生更有效的點索引的模型,就沒有進行過探索。

4.1哈希模型索引

        【哈希模型索引核心】出人意料的是,學習key分佈的CDF是學習更好的哈希函數的一個潛在途徑。但是,與範圍索引相比,我們的目標不是緊湊地或嚴格地按排序順序存儲記錄。相反,我們可以按哈希映射的目標大小M來縮放CDF,並使用,使用鍵K作爲哈希函數。如果模型F完美地學習了key的經驗CDF,則不存在衝突。此外,哈希函數與實際的哈希映射體系結構正交,可以與單獨的鏈接或任何其他哈希映射類型組合。

        對於模型,我們可以再次利用上一節中的遞歸模型體系結構。很明顯,和以前一樣,索引的大小和性能之間存在一個折衷,這受模型和數據集的影響。

        注意,如何處理插入、查找和衝突取決於散列映射體系結構。因此,與傳統的散列函數相比,學習散列函數所帶來的好處在於,它key映射到均勻分佈的空間,這取決於兩個關鍵因素:(1)模型如何準確地表示觀察到的CDF。例如,如果數據是由均勻分佈生成的,一個簡單的線性模型將能夠學習一般的數據分佈,但是得到的散列函數不會比任何足夠隨機的散列函數好。(2)散列映射體系結構:根據體系結構、實現細節、負載(即值)、衝突解決策略以及將要或可以分配多少內存(即插槽)顯著影響性能。例如,對於小鍵和小值或無值的哈希函數,使用布穀鳥哈希的傳統哈希函數可能會工作得很好,而較大的有效負載或分佈式哈希映射可能會從避免衝突中獲益更多,從而從學習的哈希函數中獲益更多。

4.2結果

        【字符串數據集實驗配置】我們評估了前一節中三個整數數據集上學習散列函數的衝突率。作爲我們的模型散列函數,我們使用了前一節中的兩階段RMI模型,第二階段有100k個模型,沒有任何隱藏層。作爲基線,我們使用了一個簡單的類似murrushHash3的哈希函數,並比較了一個與記錄具有相同槽數的表的衝突數。

        如圖8所示,在我們的數據集上,通過以合理的成本學習經驗CDF,所學習的模型可以減少高達77%的衝突;執行時間與圖4中的模型執行時間相同,大約爲25-40ns。

        模型的執行時間取決於散列映射體系結構、有效負載和許多其他因素,這對減少衝突有多大好處。例如,我們的實驗(見附錄B)表明,對於具有20字節記錄的獨立鏈式哈希映射體系結構,學習的哈希函數可以減少與隨機散列相比,延遲僅增加13ns,浪費的存儲量高達80%。它只增加13 ns而不是40 ns延遲的原因是,通常較少的衝突也會導致較少的緩存未命中,從而獲得更好的性能。另一方面,對於非常小的有效負載,使用標準散列映射進行杜鵑散列可能仍然是最好的選擇。然而,正如我們在附錄C中所示,對於較大的有效載荷,具有學習的散列函數的鏈式散列映射可以比杜鵑散列和/或傳統的隨機散列更快。最後,我們看到了分佈式設置的最大潛力。例如,NAM-DB[74]使用散列函數使用RDMA在遠程機器上查找數據。由於每次衝突的代價都非常高(即每次衝突都需要一個額外的RDMA請求,該請求按微秒的順序排列),因此模型執行時間可以忽略不計,甚至衝突率的小幅度降低都可以顯著提高整體性能。總之,學習的散列函數獨立於所使用的散列映射體系結構,並且取決於散列映射體系結構,它們的複雜性可能得到回報,也可能得不到回報

5存在性索引

        DBMS的最後一種常見指標類型是存在性索引,最重要的是Bloom過濾器一種空間效率高的概率數據結構,用來測試一個元素是否是集合的成員。它們通常用於確定cold storage中是否存在key。例如,Bigtable使用它們來確定鍵是否包含在SSTable[23]中。

        【Bloom過濾器工作原理】在內部,Bloom過濾器使用一個大小爲m的位數組和k個散列函數,每個散列函數將一個鍵映射到m數組位置之一(參見圖9(a))。要向集合中添加元素,向k個散列函數饋送一個鍵,並將返回位置的位設置爲1。爲了測試一個key是否是集合的成員,該key再次被饋送到k個散列函數中以接收k個數組位置。如果這些k個數組位值中的任何一位爲0,則該鍵不是集合的成員。換句話說,Bloom過濾器確實保證不存在假陰性【實際上是陽性,但表現爲陰性】,但具有潛在的假陽性。

        雖然Bloom過濾器具有很高的空間效率,但它們仍然可以佔用大量內存。例如,對於10億條記錄,大約需要1.76千兆字節。對於0.01%的FPR,我們需要大約2.23千兆字節。已經有幾次嘗試提高Bloom過濾器的效率[52],但是一般的觀察結果仍然存在。

        然而,如果有某種結構來確定集合內部與外部是什麼,這是可以學習的,那麼就有可能構造更有效的表示。有趣的是,對於數據庫系統的存在索引,延遲和空間需求 通常與 我們之前看到的 非常不同。考慮到訪問冷存儲的高延遲(例如磁盤或甚至頻帶),我們可以提供更復雜的模型,而主要目標是最小化索引空間和誤報次數。我們概述了使用lea構建存在索引的兩種可能的方法。

5.1學習Bloom過濾器

        構建存在性索引的兩種可能方法,而範圍索引和點索引都學習key的分佈,存在性索引需要學習一個將把所有的鍵都分開的函數。換句話說,一個好的點索引哈希函數是一個鍵之間很少衝突的函數,而一個好的Bloom過濾器哈希函數是一個有很多鍵之間的衝突和非鍵之間的衝突,但鍵和非鍵之間的衝突很少。下面我們考慮如何學習這樣一個函數f,以及如何將它合併到一個存在性索引中。

        雖然傳統的Bloom過濾器對於任何一組查詢的先驗選擇,保證了一個假陰性率(FNR)爲零和一個特定的假陽性率(FPR) ;但我們遵循這樣的概念:我們希望爲realistic queries提供特定的FPR,特別是在FNR保持爲零的情況下。也就是說,我們在查詢固定數據集上測量FPR,這在評估ML系統時很常見[30]。雖然這些定義不同,但我們認爲,假設我們可以觀察查詢的分佈,例如從歷史日誌中觀察查詢的分佈,在許多應用程序中都適用,特別是在數據庫5中。

        傳統上,存在性索引不使用鍵的分佈,也不使用它們與非鍵的區別,但是learned-Bloom過濾器可以使用。例如,如果我們的數據庫包含0≤x<n, 存在性索引可以在恆定的時間內計算出來,而且通過計算幾乎沒有內存佔用

        在考慮用於ML的數據分佈時,我們必須考慮非鍵的數據集。在這項工作中,我們考慮非鍵來自可觀察的歷史查詢的情況,並假設未來查詢來自與歷史查詢相同的分佈。當這一假設不成立時,可以使用隨機生成的key、由機器學習模型生成的非key[34]、直接處理協變量移位的重要性加權[18]或魯棒性的對抗性訓練[65];我們將此作爲未來的工作。我們用K表示key集,用U表示非key集。

5.1.1作爲分類問題的Bloom過濾器

        將存在性指標作爲一個二元概率分類任務來構造。也就是說,我們想學習一個模型f,它可以預測查詢x是鍵還是非鍵。例如,對於字符串,我們可以訓練的遞歸神經網絡(RNN)或卷積神經網絡(CNN)[64,37]。由於這是一個二元分類任務,我們的神經網絡具有產生概率的乙狀結腸激活,並訓練以最小化對數損失:。f(x)的輸出可以解釋爲x在我們的數據庫中是一個鍵的概率。因此,我們可以通過選擇閾值τ將模型轉換爲存在性指數,在閾值τ以上,我們將假設key存在於我們的數據庫中。與Bloom濾波器不同,我們的模型可能具有非零FPR和FNR;事實上,隨着FPR的下降,FNR將上升。爲了保持存在索引的無假否定約束,我們創建了一個溢出Bloom過濾器。也就是說,我們認爲是f的假負的集合,併爲這一key子集創建Bloom濾波器。然後我們可以運行圖9(c)中的生存指數:如果f(x)≥τ,則認爲key存在;否則,檢查溢出Bloom過濾器。一個問題是如何設置τ,使我們學習的Bloom濾波器具有所需的FPR p*。我們用來表示模型的FPR,其中∏U是非鍵的保持集。我們用FPRB表示我們的溢流Bloom過濾器的FPR。因此,我們系統的整體FPR是

        爲了簡單起見,我們將FPRτ=FPRB=p∗2設爲FPRO≤p∗。我們對τ進行調整,以在∮U上實現該FPR。該設置的有效性在於,所學習的模型相對於數據的大小可以相當小。此外,由於Bloom過濾器隨鍵集的大小而縮放,溢出Bloom過濾器將隨FNR而縮放。我們將從實驗上看到,這種組合在減少存在索引的內存佔用方面是有效的。最後,學習模型計算可以受益於機器學習加速器,而傳統的Bloom濾波器往往嚴重依賴於內存系統的隨機訪問延遲。

5.1.2帶模型散列的Bloom過濾器

        構建存在性索引的另一種方法是學習散列函數,其目標是最大化鍵之間和非鍵之間的衝突,同時最小化鍵和非鍵之間的衝突。有趣的是,我們可以使用與以前相同的概率分類模型來實現這一點。也就是說,我們可以創建一個散列函數d,它通過將f的輸出縮放爲

        將f映射到m大小的位數組,因此,我們可以像Bloom過濾器中的任何其他函數一樣使用d作爲散列函數。這樣做的好處是f被訓練成將大多數鍵映射到較高的位位置範圍,而非鍵映射到較低的位位置範圍(見圖9(b))。附錄E.5.2給出了對該方法的更詳細的解釋。

5.2結果

        爲了實驗性地驗證這一想法,我們探索了一個存在性指數在跟蹤黑名單釣魚網址中的應用。我們認爲谷歌透明度報告中的數據是我們需要跟蹤的關鍵。這個數據集由170萬個唯一的url組成。我們使用一個負數集,它是隨機(有效)URL和白名單URL的混合,這些URL可能會被誤認爲是仿冒網頁。我們將陰性集隨機分成訓練集、驗證集和測試集。我們訓練一個字符級RNN(特別是GRU[24])來預測URL屬於哪個集合;我們基於驗證集設置τ,並在測試集上報告FPR。

        具有所需1%FPR的普通Bloom過濾器需要2.04MB。我們考慮一個16維GRU,每個字符嵌入32維;這個模型是0.0259MB。當建立一個可比較的學習指數時,我們在驗證集上設置τ爲0.5%的FPR;這給出了55%的FNR。(測試集上的FPR爲0.4976%,驗證了所選閾值。)如上所述,我們的Bloom過濾器的大小與FNR成比例。因此,我們發現我們的模型加上溢出Bloom過濾器使用了1.31MB,大小減少了36%。如果我們想強制執行0.1%的總FPR,那麼FNR爲76%,這將使Bloom過濾器的總大小從3.06MB減少到2.59MB,內存減少了15%。我們在圖10中觀察到這種一般關係。有趣的是,我們看到不同大小的模型如何以不同的方式平衡準確性和內存權衡。

        我們簡要地考慮了在我們的查詢分佈中存在協變量轉移的情況,我們在模型中沒有討論這個問題。當使用只有隨機url的驗證和測試集時,我們發現在FPR爲1%的Bloom過濾器上可以節省60%。當使用只有白名單url的驗證和測試集時,我們發現與FPR爲1%的Bloom過濾器相比,我們可以節省21%。最終,負集的選擇是特定於應用的,協變量轉移可以更直接地解決,但這些實驗旨在爲該方法如何適應不同的情況提供直覺。

        顯然,我們的模型越精確,Bloom過濾器的尺寸就越節省。其中一個有趣的特性是,我們的模型沒有理由需要使用與Bloom過濾器相同的特性。例如,大量的研究已經開始使用ML來預測網頁是否是釣魚網頁[10,15]。在模型中可以加入WHOIS數據或IP信息等附加特徵,提高了模型的精度,減小了Bloom濾波器的尺寸,並保持了無假陰性的特性。

        此外,我們根據附錄E第5.1.2節中的方法給出了額外的結果。

圖10:學習的Bloom過濾器在廣泛的fpr中改善了內存佔用。(這裏W是RNN寬度,E是每個字符的嵌入大小)

6相關工作

        學習索引的思想建立在機器學習和索引技術的廣泛研究基礎上。在下面,我們將重點介紹最重要的相關領域。

        B-樹和變體:在過去的幾十年中,人們提出了各種不同的索引結構[36],例如基於磁盤的系統的B+樹[17]和內存系統的T-樹[46]或平衡/紅黑樹[16,20]。由於原始的主存樹的緩存性能較差,因此提出了幾種具有緩存意識的B+樹變體,如CSB+樹[58]。類似地,也有人研究如何利用諸如FAST[44]之類的SIMD指令,甚至利用gpu[44、61、43]。此外,這些(內存中)索引中的許多能夠通過在節點之間使用偏移量而不是指針來減少其存儲需求。對於文本的索引結構也有大量的研究,如tries/radix trees[19,45,31]或其他奇異的索引結構,它們結合了B-樹和tries[48]的思想。

        然而,所有這些方法都與學習索引的思想正交,因爲沒有一種方法從數據分佈中學習,以獲得更緊湊的索引表示或性能提高。同時,與我們的混合索引一樣,可能可以將現有的硬件意識索引策略與學習模型更緊密地結合起來,以進一步提高性能。

        由於B+樹消耗大量內存,因此在壓縮索引方面也做了大量工作,例如前綴/後綴截斷、字典壓縮、鍵規範化[36、33、55]或混合的熱/冷索引[75]。然而,我們提出了一種完全不同的索引壓縮方法,這種方法依賴於數據分佈,能夠實現數量級的較小索引和更快的查找時間,甚至可能改變存儲複雜性類(例如,O(n)到O(1))。有趣的是,一些現有的壓縮技術是對我們方法的補充,可以幫助進一步提高效率。例如,字典壓縮可以看作是一種嵌入形式(即,將字符串表示爲唯一整數)。

        可能與本文最相關的是A-樹[32]、BF-樹[13]和B-樹插值搜索[35]。BF樹使用B+樹來存儲關於數據集某個區域的信息,但是葉節點是Bloom過濾器,並不近似於CDF。相比之下,A-Trees使用分段線性函數來減少B-Tree中的葉節點數,並且[35]建議在B-Tree頁面中使用插值搜索。但是,學會了索引更進一步,建議使用學習模型替換整個索引結構。

        最後,像Hippo[73]、塊範圍索引[63]和小型物化聚合(SMAs)[54]這樣的稀疏索引都存儲有關值範圍的信息,但同樣沒有利用數據分佈的基本屬性。

        用於ANN索引的學習散列函數:已有很多關於學習散列函數的研究[49,68,67,59]。最值得注意的是,已經有人在學習局部敏感哈希(LSH)函數來建立近似最近鄰(ANN)索引。例如,[66,68,40]探索使用神經網絡作爲散列函數,而[69]甚至試圖保持多維輸入空間的順序。然而,LSH的一般目標是將相似項分組到桶中,以支持最近鄰查詢,通常需要在高維輸入空間中使用一些不同的hamming距離來學習近似相似性度量。沒有直接的方法來調整以前的方法來學習我們所考慮的基本數據結構,也不清楚它們是否能夠被調整。

        完美散列:完美散列[26]與我們對散列映射模型的使用非常相關。就像我們的CDF模型一樣,完美的散列試圖避免衝突。然而,在我們所知道的所有方法中,學習技術都沒有被考慮,並且函數的大小隨着數據的大小而增長。相反,學習的散列函數可以獨立於大小。例如,用於映射0到200M之間的其他整數的線性模型不會產生任何衝突,並且與數據大小無關。此外,完美散列對於B樹或Bloom過濾器也沒有用處。

        Bloom filters:最後,我們的存在性索引直接建立在bloomfilters中的現有工作的基礎上[29,11]。我們的工作再一次從不同的角度來看待這個問題,提出了一個Bloom過濾器增強的分類模型,或者使用模型作爲特殊的散列函數,其優化目標與我們爲散列映射創建的散列模型大不相同。簡潔的數據結構:學習的索引和簡潔的數據結構之間存在着有趣的聯繫,特別是秩選擇字典,如小波樹[39,38]。然而,許多簡潔的數據結構側重於H0熵(即,對索引中的每個元素進行編碼所需的位數),而學習型索引則試圖學習底層數據分佈以預測每個元素的位置。因此,學習的索引可能獲得比H0熵更高的壓縮率,但可能會以較慢的操作爲代價。此外,簡潔的數據結構通常必須爲每個用例精心構建,而學習的索引通過機器學習“自動化”這個過程。簡潔的數據結構可以爲進一步研究學習型指標提供一個框架。

        CDF建模:我們的範圍和點索引模型都與CDF模型密切相關。估計CDF是非常重要的,已經在機器學習社區[50]中進行了研究,並有一些應用,如排名[42]。如何對CDF進行最有效的建模仍然是一個有待進一步研究的問題。專家混合:我們的RMI架構遵循了一個關於爲數據子集建立專家的長期研究路線[51]。隨着神經網絡的發展,這一現象變得越來越普遍,並顯示出更大的實用性[62]。正如我們在設置中看到的那樣,它很好地讓我們能夠分離模型大小和模型計算,從而使更復雜的模型不需要更高的執行成本。

7結論和未來的工作

        我們表明學習型索引可以利用被索引數據的分佈提供顯著的效益。這爲許多有趣的研究問題打開了大門。

        其他ML模型:雖然我們關注的是線性模型和混合專家的神經網絡,但還有許多其他ML模型類型以及將它們與傳統數據結構相結合的方法,值得探索。多維索引:可以說,學習索引的思想最令人興奮的研究方向是將其擴展到多維索引。模型,特別是NNs,非常擅長捕捉複雜的高維關係。理想情況下,該模型能夠估計由任何屬性組合過濾的所有記錄的位置。

        除了索引:學習到的算法可能令人驚訝,CDF模型還有可能加速排序和連接,而不僅僅是索引。例如,加快排序的基本思想是使用現有的CDF模型F大致按排序順序排列記錄,然後使用插入排序等方法更正幾乎完全排序的數據。

        GPU/TPUs:最後,正如本文中多次提到的,將使學習索引的思想更有價值。同時,GPU/tpu也有自己的挑戰,最重要的是高調用延遲。雖然可以合理地假設,由於如前所示的異常壓縮比,可能所有學習到的索引都適合GPU/TPU,但仍需要2-3微秒才能調用對它們的任何操作。同時,機器學習加速器與CPU的集成也越來越好[6,4],通過批處理請求等技術,調用成本可以分攤,因此我們不認爲調用延遲是真正的障礙。

        綜上所述,我們已經證明了機器學習模型比最新的索引具有顯著的優勢,我們相信這是未來研究的一個富有成效的方向。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章