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