日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 智能硬件 > 人工智能AI
[導讀] 我們熟知的SQL是一種數(shù)據(jù)庫查詢語句,它方便了開發(fā)者在大型數(shù)據(jù)中執(zhí)行高效的操作。但本文從另一角度嵌套SQL查詢語句而構建了一個簡單的三層全連接網(wǎng)絡,雖然由于語句的嵌套過深而不能高效計算,但仍然是

我們熟知的SQL是一種數(shù)據(jù)庫查詢語句,它方便了開發(fā)者在大型數(shù)據(jù)中執(zhí)行高效的操作。但本文從另一角度嵌套SQL查詢語句而構建了一個簡單的三層全連接網(wǎng)絡,雖然由于語句的嵌套過深而不能高效計算,但仍然是一個非常有意思的實驗。

在這篇文章中,我們將純粹用SQL實現(xiàn)含有一個隱藏層(以及帶 ReLU 和 softmax 激活函數(shù))的神經(jīng)網(wǎng)絡。這些神經(jīng)網(wǎng)絡訓練的步驟包含前向傳播和反向傳播,將在 BigQuery 的單個SQL查詢語句中實現(xiàn)。當它在 BigQuery 中運行時,實際上我們正在成百上千臺服務器上進行分布式神經(jīng)網(wǎng)絡訓練。聽上去很贊,對吧?

也就是說,這個有趣的項目用于測試 SQL 和 BigQuery 的限制,同時從聲明性數(shù)據(jù)的角度看待神經(jīng)網(wǎng)絡訓練。這個項目沒有考慮任何的實際應用,不過最后我將討論一些實際的研究意義。

我們先從一個基于神經(jīng)網(wǎng)絡的簡單分類器開始。它的輸入尺寸為 2,輸出為二分類。我們將有一個維度為 2 的單隱層和 ReLU 激活函數(shù)。輸出層的二分類將使用 softmax 函數(shù)。我們在實現(xiàn)網(wǎng)絡時遵循的步驟將是在 Karpathy’s CS231n 指南(https://cs231n.github.io/neural-networks-case-study/)中展示的基于 SQL 版本的 Python 示例。

模型

該模型含有以下參數(shù):

輸入到隱藏層

W: 2&TImes;2 的權重矩陣(元素: w_00, w_01, w_10, w_11)

B: 2&TImes;1 的偏置向量(元素:b_0, b_1)

隱藏到輸出層

W2: 2&TImes;2 的權重矩陣(元素: w2_00, w2_01, w2_10, w2_11)

B2: 2&TImes;1 的偏置向量(元素:b2_0, b2_1)

訓練數(shù)據(jù)存儲在 BigQuery 表格當中,列 x1 和 x2 的輸入和輸出如下所示(表格名稱:example_project.example_dataset.example_table)

如前所述,我們將整個訓練作為單個 SQL 查詢語句來實現(xiàn)。在訓練完成后,通過 SQL 查詢語句將會返回參數(shù)的值。正如你可能猜到的,這將是一個層層嵌套的查詢,我們將逐步構建以準備這個查詢語句。我們將會從最內(nèi)層的子查詢開始,然后逐個增加嵌套的外層。

前向傳播

首先,我們將權重參數(shù) W 和 W2 設為服從正態(tài)分布的隨機值,將權重參數(shù) B 和 B2 設置為 0。 W 和 W2 的隨機值可以通過 SQL 本身產(chǎn)生。為了簡單起見,我們將從外部生成這些值并在 SQL 查詢中使用。用于初始化參數(shù)的內(nèi)部子查詢?nèi)缦拢?/p>

請注意,表格 example_project.example_dataset.example_table 已經(jīng)包含了列 x1、 x2 和 y。模型參數(shù)將會被作為上述查詢結果的附加列添加。

接下來,我們將計算隱藏層的激活值。我們將使用含有元素 d0 和 d1 的向量 D 表示隱藏層。我們需要執(zhí)行矩陣操作 D = np.maximum(0, np.dot(X, W) + B),其中 X 表示輸入向量(元素 x1 和 x2)。這個矩陣運算包括將權重 W 和輸入 X 相乘,再加上偏置向量 B。然后,結果將被傳遞給非線性 ReLU 激活函數(shù),該函數(shù)將會把負值設置為 0。SQL 中的等效查詢?yōu)椋?/p>

上面的查詢將兩個新列 d0 和 d1 添加到之前內(nèi)部子查詢的結果當中。 上述查詢的輸出如下所示。

這完成了從輸入層到隱藏層的一次轉換?,F(xiàn)在,我們可以執(zhí)行從隱藏層到輸出層的轉換了。

首先,我們將計算輸出層的值。公式是:scores = np.dot(D, W2) + B2。然后,我們將對計算出來的值用 softmax 函數(shù)來獲得每個類的預測概率。SQL 內(nèi)部的等價子查詢?nèi)缦拢?/p>

首先,我們將使用交叉熵損失函數(shù)來計算當前預測的總損失。首先,計算每個樣本中正確類預測概率對數(shù)的負值。交叉熵損失只是這些 X 和 Y 實例中數(shù)值的平均值。自然對數(shù)是一個遞增函數(shù),因此,將損失函數(shù)定義為負的正確類預測概率對數(shù)很直觀。如果正確類的預測概率很高,損失函數(shù)將會很低。相反,如果正確類的預測概率很低,則損失函數(shù)值將很高。

為了減少過擬合的風險,我們也將同樣增加 L2 正則化。在整體損失函數(shù)中,我們將包含 0.5*reg*np.sum(W*W) + 0.5*reg*np.sum(W2*W2),其中 reg 是超參數(shù)。在損失函數(shù)中包括這一函數(shù)將會懲罰那些權重向量中較大的值。

在查詢當中,我們同樣會計算訓練樣本的數(shù)量(num_examples)。這對于后續(xù)我們計算平均值來說很有用。SQL 查詢中計算整體損失函數(shù)的語句如下:

反向傳播

接下來,對于反向傳播,我們將計算每個參數(shù)對于損失函數(shù)的偏導數(shù)。我們使用鏈式法則從最后一層開始逐層計算。首先,我們將通過使用交叉熵和 softmax 函數(shù)的導數(shù)來計算 score 的梯度。與此相對的查詢是:

在上文中,我們用 scores = np.dot(D, W2) + B2 算出了分數(shù)。因此,基于分數(shù)的偏導數(shù),我們可以計算隱藏層 D 和參數(shù) W2,B2 的梯度。對應的查詢語句是:

同理,我們知道 D = np.maximum(0, np.dot(X, W) + B)。因此,通過 D 的偏導,我們可以計算出 W 和 B 的導數(shù)。我們無須計算 X 的偏導,因為它不是模型的參數(shù),且也不必通過其它模型參數(shù)進行計算。計算 W 和 B 的偏導的查詢語句如下:

最后,我們使用 W、B、W2 及 B2 各自的導數(shù)進行更新操作。計算公式是 param = learning_rate * d_param ,其中l(wèi)earning_rate 是參數(shù)。為了體現(xiàn) L2 正則化,我們會在計算 dW 和 dW2 時加入一個正則項 reg*weight。我們也去掉如 dw_00, correct_logprobs 等緩存的列,它們曾在子查詢時被創(chuàng)建,用于保存訓練數(shù)據(jù)(x1, x2 及 y 列) 和模型參數(shù)(權重和偏置項)。對應的查詢語句如下:

這包含了正向和反向傳播的一整個迭代過程。以上查詢語句將返回更新后的權重和偏置項。部分結果如下所示:

為了進行多次訓練迭代,我們將反復執(zhí)行上述過程。用一個簡單 Python 函數(shù)足以搞定,代碼鏈接如下:https://github.com/harisankarh/nn-sql-bq/blob/master/training.py。

因為查詢語句的多重嵌套和復雜度,在 BigQuery 中執(zhí)行查詢時多項系統(tǒng)資源告急。BigQuery 的標準 SQL 擴展的縮放性比傳統(tǒng) SQL 語言要好。即使是標準 SQL 查詢,對于有 100k 個實例的數(shù)據(jù)集,也很難執(zhí)行超過 10 個迭代。因為資源的限制,我們將會使用一個簡單的決策邊界來評估模型,如此一來,我們就可以在少量迭代后得到較好的準確率。

我們將使用一個簡單的數(shù)據(jù)集,其輸入 X1、X2 服從標準正態(tài)分布。二進制輸出 y 簡單判斷 x1 + x2 是否大于 0。為了更快的訓練完 10 個迭代,我們使用一個較大的學習率 2.0(注意:這么大的學習率并不推薦實際使用,可能會導致發(fā)散)。將上述語句執(zhí)行 10 個迭代得出的模型參數(shù)如下:

我們將使用 Bigquery 的函數(shù) save to table 把結果保存到一個新表。我們現(xiàn)在可以在訓練集上執(zhí)行一次推理來比較預測值和預期值的差距。查詢語句片段在以下鏈接中:

https://github.com/harisankarh/nn-sql-bq/blob/master/query_for_prediction.sql。

僅通過十個迭代,我們的準確率就可達 93%(測試集上也差不多)。

如果我們把迭代次數(shù)加到 100 次,準確率高達 99%。

優(yōu)化

下面是對本項目的總結。我們由此獲得了哪些啟發(fā)?如你所見,資源瓶頸決定了數(shù)據(jù)集的大小以及迭代執(zhí)行的次數(shù)。除了祈求谷歌開放資源上限,我們還有如下優(yōu)化手段來解決這個問題。

創(chuàng)建中間表和多個 SQL 語句有助于增加迭代數(shù)。例如,前 10 次迭代的結果可以存儲在一個中間表中。同一查詢語句在執(zhí)行下 10 次迭代時可以基于這個中間表。如此,我們就執(zhí)行了 20 個迭代。這個方法可以反復使用,以應對更大的查詢迭代。

相比于在每一步增加外查詢,我們應該盡可能的使用函數(shù)的嵌套。例如,在一個子查詢中,我們可以同時計算 scores 和 probs,而不應使用 2 層嵌套查詢。

在上例中,所有的中間項都被保留直到最后一個外查詢執(zhí)行。其中有些項如 correct_logprobs 可以早些刪除(盡管 SQL 引擎可能會自動的執(zhí)行這類優(yōu)化)。

多嘗試應用用戶自定義的函數(shù)。如果感興趣,你可以看看這個 BigQuery 的用戶自定義函數(shù)的服務模型的項目(但是,無法使用 SQL 或者 UDFs 進行訓練)。

意義

現(xiàn)在,讓我們來看看基于深度學習的分布式 SQL 引擎的深層含義。 BigQuery、Presto 這類 SQL 倉庫引擎的一個局限性在于,查詢操作是在 CPU 而不是 GPU 上執(zhí)行的。研究 blazingdb 和 mapd 等基于 GPU 加速的數(shù)據(jù)庫查詢結果想必十分有趣。一個簡單的研究方法就是使用分布式 SQL 引擎執(zhí)行查詢和數(shù)據(jù)分布,并用 GPU 加速數(shù)據(jù)庫執(zhí)行本地計算。

退一步來看,我們已經(jīng)知道執(zhí)行分布式深度學習很難。分布式 SQL 引擎在數(shù)十年內(nèi)已經(jīng)有了大量的研究工作,并產(chǎn)出如今的查詢規(guī)劃、數(shù)據(jù)分區(qū)、操作歸置、檢查點設置、多查詢調度等技術。其中有些可以與分布式深度學習相結合。如果你對這些感興趣,請看看這篇論文(https://sigmodrecord.org/publications/sigmodRecord/1606/pdfs/04_vision_Wang.pdf),該論文對分布式數(shù)據(jù)庫和分布式深度學習展開了廣泛的研究討論。

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅動性能的關鍵。

關鍵字: 工業(yè)電機 驅動電源

LED 驅動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅動電源 照明系統(tǒng) 散熱

根據(jù)LED驅動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅動電源

在現(xiàn)代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質量和效率直接關系到城市的公共安全、居民生活質量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅動電源 功率因數(shù)校正

在LED照明技術日益普及的今天,LED驅動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅動電源

關鍵字: LED 驅動電源 開關電源

LED驅動電源是把電源供應轉換為特定的電壓電流以驅動LED發(fā)光的電壓轉換器,通常情況下:LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅動電源
關閉