本文由 【AI前線】原創(chuàng),原文鏈接:http://t.cn/RTVTqN2
譯者 | 馬卓奇
編輯 | Emily
AI前線導讀:數據庫索引結構其實也是模型,例如 B-tree索引、哈希映射以及 BitMap索引。從這一點出發(fā),本論文證明了目前的索引模型均可以用其它可學習的模型來替代。初步實驗結果顯示,與基于緩存優(yōu)化的 B-tree結構相比,使用神經網絡在速度上可以提高 70%,并且大大節(jié)省了內存。“機器學習模型有可能比目前最先進的數據庫索引有更顯著的好處”。
如果這項研究有更多的成果,或許將來我們回顧的時候會說,索引領域首先受到了沖擊,逐漸地,其他數據庫組件(排序算法、查詢優(yōu)化、連接)都將被神經網絡(NN)取代。
無論如何,這是一個很有前途的研究方向,而這篇論文確實發(fā)人深省。
研究動機
數據庫最開始是統(tǒng)一的,一刀切的“黑箱”問題。隨著時間的推移,這一觀點細化到了“標準尺寸”的 OLAP數據庫和 OLTP數據庫。
數據庫使用索引來快速訪問數據。B-tree和哈希映射是常用的實現索引的技術。但從“黑箱”的觀點來看,數據庫處理將數據視為不透明的,盲目地使用這些索引方法,而不對數據做任何假設。然而,很明顯的一點是,不清楚數據分布會使算法不能發(fā)揮它最大的作用。考慮一下這樣的實驗:如果關鍵字從 0到 500M,那么直接用關鍵字進行索引要比用哈希要快。如果我們知道數據的累積分布函數(cumulative distributed function,CDF),這種觀察可以擴展到其他的數據分布。我們可以概括成“ * CDF 關鍵字 * 記錄大小”可以得到關鍵字指向的記錄的大致位置。
那么,通過了解數據分布,我們可以獲得性能提升。但是當我們把這個問題視作全“白盒”問題時,會失去可重用性。我們不能全“白盒”,因為每次都從頭檢查數據、設計索引的代價太大了。
這篇文章研究表明,利用神經網絡來學習數據的分布,我們可以有一個“灰盒”的方法來進行索引的設計,并且通過將索引設計為數據感知的,可以獲得性能優(yōu)勢。
目前較為主流的索引結構可以根據各種訪問模式的不同需求分為如下三類:
B-tree,用以處理范圍查詢
哈希映射,用于點查找查詢
布隆過濾器,用于包含集合的查找
我們主要關注用可學習結構替代 B-tree結構的部分。對于哈希映射,學習到的結構是基于數據累積分布函數的直接函數。
B-tree
B-tree提供了一種層級結構的有效索引方法。
為什么可以用神經網絡模型來代替 B-tree呢?從概念上講,B-tree本身就是一個模型,類似機器學習中的回歸樹模型:它可以將查找鍵映射到頁面中的位置,并且最小誤差為 0,最大誤差為頁面尺寸,而且如果該鍵存在,則保證它一定能被定位。因此,我們可以用其他機器學習模型,包括深度學習模型來替代這種索引,只要它們能提供同樣的最小和最大誤差的保證。
下一步,如何用其它機器學習模型提供同樣的誤差保證?我們唯一需要做的就是為每個鍵執(zhí)行模型,并記住一個位置的最壞預測。給定一個鍵,該模型對數據的位置進行預測;如果該鍵存在,則保證它位于由最小和最大誤差定義的預測范圍內。我們用已有的數據來訓練模型。因此,我們能夠用任何其他類型的回歸模型取代 B-tree,包括線性回歸和神經網絡。
我們用學習到的模型來替代 B-tree能獲得如下好處:
更小的索引:更少的內存或 L1緩存
更快的查找:因為索引較小,提升了查找速度
更多的并行性(TPU),如果是 B-tree則是層次性。
這里的關鍵思想是以提高計算為代價減少內存,寄希望于計算成本越來越低的市場趨勢(如果你能在 TPU或 GPU上使用它,你會得到更多的好處)
主要算法
為了克服上述挑戰(zhàn),并探索可學習模型作為索引結構的替代或改進的潛力,作者提出了可學習索引框架(Learning Index Framework,LIF)、遞歸模型索引(Recursive-Model Indexes,RMI),以及基于標準誤差的搜索策略。作者主要關注簡單、全連接的神經網絡,僅僅是因為它們的簡單性,但許多其他類型的模型也是可以考慮的。
可學習索引框架(Learning Index Framework, LIF)
LIF可以看作是一個索引合成系統(tǒng),給定一個索引規(guī)范,LIF可以生成不同的索引配置,優(yōu)化它們,并自動測試它們。給定一個訓練好的 Tensorflow模型,LIF從模型中自動提取所有的權重,并且基于模型規(guī)范在 C++中生成有效的索引結構。實驗證明,運行簡單模型的時間只需 30納秒。
遞歸模型索引(Recursive-Model Indexes,RMI)
用單一模型來降低最小最大誤差是十分困難的,但是僅用簡單模型來代替 B-tree的前兩層,來得到同樣的預測精度提升卻是十分容易做到的。類似的,如果模型可以只關注子數據集,那么降低誤差也就更簡單了。
基于以上觀察,作者提出了遞歸回歸模型(如下圖)。
作者建立了模型的層次結構。在每一層,模型將查詢鍵作為輸入,并基于它選擇下一階模型,直到最后一階模型預測出位置。每個模型對鍵的位置進行了一定的預測,并利用預測結果來選擇下一個模型,該模型負責鍵空間的某個區(qū)域,并且以較低的誤差進行更好的預測。
該模型有以下幾個優(yōu)點:
(1)它利用了數據分布的整體形狀具有很容易學習的特點。
(2)該結構有效地將空間劃分成更小的子范圍,類似 B-tree或決策樹,能夠在更少的操作次數內達到所要求的“最后一步”的準確度。
(3)在各階段之間不需要搜索過程。
混合索引
該遞歸模型索引的另外一個優(yōu)點是可以構造混合模型。例如,在模型頂層,一個簡單的 ReLU神經元或許是最好的選擇,因為它通常能夠學習各種復雜的數據分布,而底層的模型可以是大量的簡單線性回歸模型,因為它們在空間和執(zhí)行時間上消耗都很低。
注意,混合索引可以將可學習索引結構在最壞情況下的性能保留在 B-tree水平。也就是說,當數據分布很難學習得到時,所有的模型都會自動替換成 B-tree,讓它幾乎成為一個完整的 B-tree。
搜索策略
論文提出了幾個搜索策略:
(1)模型二進制搜索:默認搜索策略,傳統(tǒng)的二進制搜索不同之處僅在于第一個中間點被設置為模型所預測的值。
(2)偏置搜索:這種搜索策略是默認搜索策略的改進,通過在每次迭代中不均勻地從中間到左右位置進行范圍分割。
(3)偏置四進制搜索:最后,我們開發(fā)了一種新的搜索策略,在每次迭代中并不是選擇一個新的中間點進行測試,而是三個新的數據點,即四進制搜索。
字符串索引
論文主要關注索引實值鍵,但是許多數據庫依靠字符串索引,但幸運的是,大量機器學習研究都在關注字符串建模。
將字符串轉化為可輸入模型的特征向量需要進行詞條化操作。由于大多數機器學習模型在輸入尺寸相同的條件下表現更好,作者設置了最大輸入長度 N。作者使用了一個相對較小的前饋神經網絡的層次結構。與之前的模型不同之處在于輸入為一個向量,而不是實值。
根據字符串的累計分布函數(CDF)設計出通用的機器學習模型是十分困難的,未來的大量研究工作可以圍繞優(yōu)化字符串索引的可學習模型展開。
實驗結果
為了對比可學習的索引和 B-tree索引,作者創(chuàng)建了 4個二級索引,3個真實世界數據庫,(1) Weblogs,(2)Maps,(3)web-documents,和一個合成的數據庫,(4)Lognormal。
數值索引數據庫
Weblogs數據庫,可學習索引結構與 B-tree索引對比結果:
Maps數據庫,可學習索引結構與 B-tree索引對比結果:
Lognormal合成數據庫,可學習索引結構與 B-tree索引對比結果:
作者主要對比了總查詢時間和局部搜索時間,以及索引結構大小、節(jié)省空間、模型誤差以及誤差方差。從實驗結果中可以看出,幾乎所有的配置情況下,可學習索引結構的表現都領先于 B-tree,速度上快了 3倍,尺寸上小了一個數量級。
字符串索引數據庫
web-documents,基于字符串的索引數據庫,可學習索引結構與 B-tree索引對比結果:
從實驗結果中可以看出,對于字符串索引,可學習索引結構的優(yōu)勢并不是很突出。作者分析認為運行模型的計算量太大,這個問題可以用 GPU或 TPU解決。
學習得到的字符串索引在不同搜索策略下的對比結果:
未來研究挑戰(zhàn)
插入和更新
(1)模型泛化性和“最后一步”準確度的折衷。模型的“最后一步”預測越準確,模型就會越容易過擬合,并且很難泛化到新的數據條目上。
(2)如果數據分布發(fā)生變化怎么辦?可學習索引是否可以檢測到數據變化?是否可以像 B-tree一樣可以一直保證搜索和插入操作的復雜度為 O(logn)?
作者認為處理插入的另一種更簡單的方法是構建 delta索引:所有的插入都放在緩沖區(qū)中,并且不時地合并到模型的再訓練中。這種方法已經被大量使用,并且可以得到 GPU或 TPU的硬件加速支持。除此之外,也可以通過使用以前的解決方案作為出發(fā)點,熱啟動每個模型的訓練。特別是依賴于梯度下降優(yōu)化的模型可以從這種優(yōu)化方法中獲益。
分頁
對于存儲在磁盤上的數據索引而言,將數據分割成存儲在磁盤中不同區(qū)域的較大頁面是很常見的。這種情況下,學習數據的 CDF分布不再滿足建模要求。
作者認為有以下幾種替代方法:
(1)利用 RMI結構,最小化模型覆蓋區(qū)域的重疊部分。
(2)使用翻譯表。
(3)用更復雜的模型學習頁面的實際指針。
更多算法細節(jié),請參考原論文:
https://arxiv.org/abs/1712.01208
查看英文原文:
http://muratbuffalo.blogspot.com/2017/12/paper-summary-case-for-learned-index.html
關注我們的微信號"AI前線",后臺回復“AI”可獲得《AI前線》系列PDF電子書