欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解python架構(gòu)?PyNeuraLogic超越Transformers

 更新時(shí)間:2023年03月22日 15:35:46   作者:冷凍工廠  
這篇文章主要為大家介紹了python使用?PyNeuraLogic超越Transformers示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

引言

展示神經(jīng)符號(hào)編程的力量

1. 簡(jiǎn)介

在過(guò)去的幾年里,我們看到了基于 Transformer 的模型的興起,并在自然語(yǔ)言處理或計(jì)算機(jī)視覺(jué)等許多領(lǐng)域取得了成功的應(yīng)用。在本文中,我們將探索一種簡(jiǎn)潔、可解釋和可擴(kuò)展的方式來(lái)表達(dá)深度學(xué)習(xí)模型,特別是 Transformer,作為混合架構(gòu),即通過(guò)將深度學(xué)習(xí)與符號(hào)人工智能結(jié)合起來(lái)。為此,我們將在名為 PyNeuraLogic 的 Python 神經(jīng)符號(hào)框架中實(shí)現(xiàn)模型。

將符號(hào)表示與深度學(xué)習(xí)相結(jié)合,填補(bǔ)了當(dāng)前深度學(xué)習(xí)模型的空白,例如開(kāi)箱即用的可解釋性或缺少推理技術(shù)。也許,增加參數(shù)的數(shù)量并不是實(shí)現(xiàn)這些預(yù)期結(jié)果的最合理方法,就像增加相機(jī)百萬(wàn)像素的數(shù)量不一定會(huì)產(chǎn)生更好的照片一樣。

PyNeuraLogic 框架基于邏輯編程——邏輯程序包含可微分的參數(shù)。該框架非常適合較小的結(jié)構(gòu)化數(shù)據(jù)(例如分子)和復(fù)雜模型(例如 Transformers 和圖形神經(jīng)網(wǎng)絡(luò))。另一方面,PyNeuraLogic 不是非關(guān)系型和大型張量數(shù)據(jù)的最佳選擇。

該框架的關(guān)鍵組成部分是一個(gè)可微分的邏輯程序,我們稱之為模板。模板由以抽象方式定義神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的邏輯規(guī)則組成——我們可以將模板視為模型架構(gòu)的藍(lán)圖。然后將模板應(yīng)用于每個(gè)輸入數(shù)據(jù)實(shí)例,以生成(通過(guò)基礎(chǔ)和神經(jīng)化)輸入樣本獨(dú)有的神經(jīng)網(wǎng)絡(luò)。這個(gè)過(guò)程與其他具有預(yù)定義架構(gòu)的框架完全不同,這些框架無(wú)法針對(duì)不同的輸入樣本進(jìn)行自我調(diào)整。

2. Symbolic Transformers

我們通常傾向于將深度學(xué)習(xí)模型實(shí)現(xiàn)為對(duì)批處理成一個(gè)大張量的輸入令牌的張量操作。這是有道理的,因?yàn)樯疃葘W(xué)習(xí)框架和硬件(例如 GPU)通常針對(duì)處理更大的張量而不是形狀和大小不同的多個(gè)張量進(jìn)行了優(yōu)化。 Transformers 也不例外,通常將單個(gè)標(biāo)記向量表示批處理到一個(gè)大矩陣中,并將模型表示為對(duì)此類矩陣的操作。然而,這樣的實(shí)現(xiàn)隱藏了各個(gè)輸入標(biāo)記如何相互關(guān)聯(lián),這可以在 Transformer 的注意力機(jī)制中得到證明。

3. Attention 機(jī)制

注意力機(jī)制構(gòu)成了所有 Transformer 模型的核心。具體來(lái)說(shuō),它的經(jīng)典版本使用了所謂的多頭縮放點(diǎn)積注意力。讓我們用一個(gè)頭(為了清楚起見(jiàn))將縮放的點(diǎn)積注意力分解成一個(gè)簡(jiǎn)單的邏輯程序。

注意力的目的是決定網(wǎng)絡(luò)應(yīng)該關(guān)注輸入的哪些部分。注意通過(guò)計(jì)算值 V 的加權(quán)和來(lái)實(shí)現(xiàn),其中權(quán)重表示輸入鍵 K 和查詢 Q 的兼容性。在這個(gè)特定版本中,權(quán)重由查詢 Q 和查詢的點(diǎn)積的 softmax 函數(shù)計(jì)算鍵 K,除以輸入特征向量維數(shù) d_k 的平方根。

(R.weights(V.I, V.J) <= (R.d_k, R.k(V.J).T, R.q(V.I))) | [F.product, F.softmax_agg(agg_terms=[V.J])],
(R.attention(V.I) <= (R.weights(V.I, V.J), R.v(V.J)) | [F.product]

在 PyNeuraLogic 中,我們可以通過(guò)上述邏輯規(guī)則充分捕捉注意力機(jī)制。第一條規(guī)則表示權(quán)重的計(jì)算——它計(jì)算維度的平方根倒數(shù)與轉(zhuǎn)置的第 j 個(gè)鍵向量和第 i 個(gè)查詢向量的乘積。然后我們用 softmax 聚合給定 i 和所有可能的 j 的所有結(jié)果。

然后,第二條規(guī)則計(jì)算該權(quán)重向量與相應(yīng)的第 j 個(gè)值向量之間的乘積,并對(duì)每個(gè)第 i 個(gè)標(biāo)記的不同 j 的結(jié)果求和。

4. Attention Masking

在訓(xùn)練和評(píng)估期間,我們通常會(huì)限制輸入令牌可以參與的內(nèi)容。例如,我們想限制標(biāo)記向前看和關(guān)注即將到來(lái)的單詞。流行的框架,例如 PyTorch,通過(guò)屏蔽實(shí)現(xiàn)這一點(diǎn),即將縮放的點(diǎn)積結(jié)果的元素子集設(shè)置為某個(gè)非常低的負(fù)數(shù)。這些數(shù)字強(qiáng)制 softmax 函數(shù)將零指定為相應(yīng)標(biāo)記對(duì)的權(quán)重。

(R.weights(V.I, V.J) <= (
    R.d_k, R.k(V.J).T, R.q(V.I), R.special.leq(V.J, V.I)
)) | [F.product, F.softmax_agg(agg_terms=[V.J])],

使用我們的符號(hào)表示,我們可以通過(guò)簡(jiǎn)單地添加一個(gè)身體關(guān)系作為約束來(lái)實(shí)現(xiàn)這一點(diǎn)。在計(jì)算權(quán)重時(shí),我們限制第 j 個(gè)指標(biāo)小于或等于第 i 個(gè)指標(biāo)。與掩碼相反,我們只計(jì)算所需的縮放點(diǎn)積。

5. 非標(biāo)準(zhǔn) Attention

當(dāng)然,象征性的“掩蔽”可以是完全任意的。我們大多數(shù)人都聽(tīng)說(shuō)過(guò)基于稀疏變換器的 GPT-3?(或其應(yīng)用程序,例如 ChatGPT)。? 稀疏變換器的注意力(跨步版本)有兩種類型的注意力頭:

  • 一個(gè)只關(guān)注前 n 個(gè)標(biāo)記 (0 ≤ i − j ≤ n)
  • 一個(gè)只關(guān)注每第 n 個(gè)前一個(gè)標(biāo)記 ((i − j) % n = 0)

兩種類型的頭的實(shí)現(xiàn)都只需要微小的改變(例如,對(duì)于 n = 5)。

(R.weights(V.I, V.J) <= (
    R.d_k, R.k(V.J).T, R.q(V.I),
    R.special.leq(V.D, 5), R.special.sub(V.I, V.J, V.D),
)) | [F.product, F.softmax_agg(agg_terms=[V.J])],
(R.weights(V.I, V.J) <= (
    R.d_k, R.k(V.J).T, R.q(V.I),
    R.special.mod(V.D, 5, 0), R.special.sub(V.I, V.J, V.D),
)) | [F.product, F.softmax_agg(agg_terms=[V.J])],

我們可以走得更遠(yuǎn),將對(duì)類似圖形(關(guān)系)輸入的注意力進(jìn)行概括,就像在關(guān)系注意力中一樣。? 這種類型的注意力在圖形上運(yùn)行,其中節(jié)點(diǎn)只關(guān)注它們的鄰居(由邊連接的節(jié)點(diǎn))。查詢 Q、鍵 K 和值 V 是邊嵌入與節(jié)點(diǎn)向量嵌入相加的結(jié)果。

(R.weights(V.I, V.J) <= (R.d_k, R.k(V.I, V.J).T, R.q(V.I, V.J))) | [F.product, F.softmax_agg(agg_terms=[V.J])],
(R.attention(V.I) <= (R.weights(V.I, V.J), R.v(V.I, V.J)) | [F.product],
R.q(V.I, V.J) <= (R.n(V.I)[W_qn], R.e(V.I, V.J)[W_qe]),
R.k(V.I, V.J) <= (R.n(V.J)[W_kn], R.e(V.I, V.J)[W_ke]),
R.v(V.I, V.J) <= (R.n(V.J)[W_vn], R.e(V.I, V.J)[W_ve]),

在我們的例子中,這種類型的注意力與之前顯示的縮放點(diǎn)積注意力幾乎相同。唯一的區(qū)別是添加了額外的術(shù)語(yǔ)來(lái)捕獲邊緣。將圖作為注意力機(jī)制的輸入似乎很自然,這并不奇怪,因?yàn)?Transformer 是一種圖神經(jīng)網(wǎng)絡(luò),作用于完全連接的圖(未應(yīng)用掩碼時(shí))。在傳統(tǒng)的張量表示中,這并不是那么明顯。

6. Encoder

現(xiàn)在,當(dāng)我們展示 Attention 機(jī)制的實(shí)現(xiàn)時(shí),構(gòu)建整個(gè) transformer 編碼器塊的缺失部分相對(duì)簡(jiǎn)單。

我們已經(jīng)在 Relational Attention 中看到了如何實(shí)現(xiàn)嵌入。對(duì)于傳統(tǒng)的 Transformer,嵌入將非常相似。我們將輸入向量投影到三個(gè)嵌入向量中——鍵、查詢和值。

R.q(V.I) <= R.input(V.I)[W_q],
R.k(V.I) <= R.input(V.I)[W_k],
R.v(V.I) <= R.input(V.I)[W_v],

查詢嵌入通過(guò)跳過(guò)連接與注意力的輸出相加。然后將生成的向量歸一化并傳遞到多層感知器 (MLP)。

(R.norm1(V.I) <= (R.attention(V.I), R.q(V.I))) | [F.norm],

對(duì)于 MLP,我們將實(shí)現(xiàn)一個(gè)具有兩個(gè)隱藏層的全連接神經(jīng)網(wǎng)絡(luò),它可以優(yōu)雅地表達(dá)為一個(gè)邏輯規(guī)則。

(R.mlp(V.I)[W_2] <= (R.norm(V.I)[W_1])) | [F.relu],

最后一個(gè)帶有規(guī)范化的跳過(guò)連接與前一個(gè)相同。

(R.norm2(V.I) <= (R.mlp(V.I), R.norm1(V.I))) | [F.norm],

我們已經(jīng)構(gòu)建了構(gòu)建 Transformer 編碼器所需的所有部分。解碼器使用相同的組件;因此,其實(shí)施將是類似的。讓我們將所有塊組合成一個(gè)可微分邏輯程序,該程序可以嵌入到 Python 腳本中并使用 PyNeuraLogic 編譯到神經(jīng)網(wǎng)絡(luò)中。

R.q(V.I) <= R.input(V.I)[W_q],
R.k(V.I) <= R.input(V.I)[W_k],
R.v(V.I) <= R.input(V.I)[W_v],
R.d_k[1 / math.sqrt(embed_dim)],
(R.weights(V.I, V.J) <= (R.d_k, R.k(V.J).T, R.q(V.I))) | [F.product, F.softmax_agg(agg_terms=[V.J])],
(R.attention(V.I) <= (R.weights(V.I, V.J), R.v(V.J)) | [F.product],
(R.norm1(V.I) <= (R.attention(V.I), R.q(V.I))) | [F.norm],
(R.mlp(V.I)[W_2] <= (R.norm(V.I)[W_1])) | [F.relu],
(R.norm2(V.I) <= (R.mlp(V.I), R.norm1(V.I))) | [F.norm],

總結(jié)

在本文中,我們分析了 Transformer 架構(gòu)并演示了它在名為 PyNeuraLogic 的神經(jīng)符號(hào)框架中的實(shí)現(xiàn)。通過(guò)這種方法,我們能夠?qū)崿F(xiàn)各種類型的 Transformer,只需對(duì)代碼進(jìn)行微小的更改,說(shuō)明每個(gè)人都可以如何快速轉(zhuǎn)向和開(kāi)發(fā)新穎的 Transformer 架構(gòu)。它還指出了各種版本的 Transformers 以及帶有 GNN 的 Transformers 的明顯相似之處。

以上就是詳解python使用 PyNeuraLogic超越Transformers的詳細(xì)內(nèi)容,更多關(guān)于PyNeuraLogic超越Transformers的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python使用xmlrpclib模塊實(shí)現(xiàn)對(duì)百度google的ping功能

    python使用xmlrpclib模塊實(shí)現(xiàn)對(duì)百度google的ping功能

    這篇文章主要介紹了python使用xmlrpclib模塊實(shí)現(xiàn)對(duì)百度google的ping功能,實(shí)例分析了xmlrpclib模塊的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • 簡(jiǎn)單了解python變量的作用域

    簡(jiǎn)單了解python變量的作用域

    這篇文章主要介紹了簡(jiǎn)單了解python變量的作用域,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Python繪圖實(shí)現(xiàn)顯示中文

    Python繪圖實(shí)現(xiàn)顯示中文

    今天小編就為大家分享一篇Python繪圖實(shí)現(xiàn)顯示中文,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • 11行Python代碼實(shí)現(xiàn)解密摩斯密碼

    11行Python代碼實(shí)現(xiàn)解密摩斯密碼

    摩爾斯電碼是一種時(shí)通時(shí)斷的信號(hào)代碼,通過(guò)不同的排列順序來(lái)表達(dá)不同的英文字母、數(shù)字和標(biāo)點(diǎn)符號(hào)。本文將通過(guò)Python代碼來(lái)實(shí)現(xiàn)解密摩斯密碼,感興趣的可以學(xué)習(xí)一下
    2022-04-04
  • 將pandas.dataframe的數(shù)據(jù)寫(xiě)入到文件中的方法

    將pandas.dataframe的數(shù)據(jù)寫(xiě)入到文件中的方法

    今天小編就為大家分享一篇將pandas.dataframe的數(shù)據(jù)寫(xiě)入到文件中的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • pandas 取出表中一列數(shù)據(jù)所有的值并轉(zhuǎn)換為array類型的方法

    pandas 取出表中一列數(shù)據(jù)所有的值并轉(zhuǎn)換為array類型的方法

    下面小編就為大家分享一篇pandas 取出表中一列數(shù)據(jù)所有的值并轉(zhuǎn)換為array類型的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • Python查找算法之插補(bǔ)查找算法的實(shí)現(xiàn)

    Python查找算法之插補(bǔ)查找算法的實(shí)現(xiàn)

    這篇文章主要介紹了Python查找算法之插補(bǔ)查找算法的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 用vue.js組件模擬v-model指令實(shí)例方法

    用vue.js組件模擬v-model指令實(shí)例方法

    在本篇文章里小編給各位整理的是關(guān)于用vue.js組件模擬v-model指令實(shí)例方法和相關(guān)代碼,需要的朋友們可以跟著學(xué)習(xí)下。
    2019-07-07
  • 基于Python編寫(xiě)一個(gè)刷題練習(xí)系統(tǒng)

    基于Python編寫(xiě)一個(gè)刷題練習(xí)系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了如何基于Python語(yǔ)言編寫(xiě)一個(gè)簡(jiǎn)單的刷題練習(xí)系統(tǒng),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-02-02
  • Python+matplotlib實(shí)現(xiàn)堆疊圖的繪制

    Python+matplotlib實(shí)現(xiàn)堆疊圖的繪制

    Matplotlib作為Python的2D繪圖庫(kù),它以各種硬拷貝格式和跨平臺(tái)的交互式環(huán)境生成出版質(zhì)量級(jí)別的圖形。本文將利用Matplotlib庫(kù)繪制堆疊圖,感興趣的可以了解一下
    2022-03-03

最新評(píng)論