最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

引言

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

1. 簡介

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

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

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

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

2. Symbolic Transformers

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

3. Attention 機(jī)制

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

注意力的目的是決定網(wǎng)絡(luò)應(yīng)該關(guān)注輸入的哪些部分。注意通過計算值 V 的加權(quán)和來實現(xiàn),其中權(quán)重表示輸入鍵 K 和查詢 Q 的兼容性。在這個特定版本中,權(quán)重由查詢 Q 和查詢的點積的 softmax 函數(shù)計算鍵 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ī)則充分捕捉注意力機(jī)制。第一條規(guī)則表示權(quán)重的計算——它計算維度的平方根倒數(shù)與轉(zhuǎn)置的第 j 個鍵向量和第 i 個查詢向量的乘積。然后我們用 softmax 聚合給定 i 和所有可能的 j 的所有結(jié)果。

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

4. Attention Masking

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

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

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

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

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

兩種類型的頭的實現(xiàn)都只需要微小的改變(例如,對于 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),將對類似圖形(關(guān)系)輸入的注意力進(jìn)行概括,就像在關(guān)系注意力中一樣。? 這種類型的注意力在圖形上運(yùn)行,其中節(jié)點只關(guān)注它們的鄰居(由邊連接的節(jié)點)。查詢 Q、鍵 K 和值 V 是邊嵌入與節(jié)點向量嵌入相加的結(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]),

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

6. Encoder

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

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

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],

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

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

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

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

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

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

我們已經(jīng)構(gòu)建了構(gòu)建 Transformer 編碼器所需的所有部分。解碼器使用相同的組件;因此,其實施將是類似的。讓我們將所有塊組合成一個可微分邏輯程序,該程序可以嵌入到 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)符號框架中的實現(xiàn)。通過這種方法,我們能夠?qū)崿F(xiàn)各種類型的 Transformer,只需對代碼進(jìn)行微小的更改,說明每個人都可以如何快速轉(zhuǎn)向和開發(fā)新穎的 Transformer 架構(gòu)。它還指出了各種版本的 Transformers 以及帶有 GNN 的 Transformers 的明顯相似之處。

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

相關(guān)文章

  • Python模擬登錄微博并爬取表情包

    Python模擬登錄微博并爬取表情包

    前段時間爬取的知乎表情包用完了嗎?今天再帶大家去微博爬一波表情包吧.文中有非常詳細(xì)的代碼示例,廢話不多說,讓我們愉快地開始吧,需要的朋友可以參考下
    2021-06-06
  • pycharm配置anaconda環(huán)境時找不到python.exe的兩種解決辦法

    pycharm配置anaconda環(huán)境時找不到python.exe的兩種解決辦法

    如果你在Anaconda中創(chuàng)建了虛擬環(huán)境,但是無法找到python.exe,可能是因為虛擬環(huán)境的Python路徑?jīng)]有添加到系統(tǒng)環(huán)境變量中,這篇文章主要給大家介紹了關(guān)于pycharm配置anaconda環(huán)境時找不到python.exe的兩種解決辦法,需要的朋友可以參考下
    2024-07-07
  • python使用建議技巧分享(三)

    python使用建議技巧分享(三)

    這篇文章主要介紹了python的一些使用建議技巧分享,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-08-08
  • python實現(xiàn)Dijkstra靜態(tài)尋路算法

    python實現(xiàn)Dijkstra靜態(tài)尋路算法

    這篇文章主要介紹了python實現(xiàn)Dijkstra靜態(tài)尋路算法,常用于路由算法或者作為其他圖算法的一個子模塊,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • 如何獲取numpy array前N個最大值

    如何獲取numpy array前N個最大值

    這篇文章主要介紹了獲取numpy array前N個最大值的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • python中pandas nlargest()的詳細(xì)用法小結(jié)

    python中pandas nlargest()的詳細(xì)用法小結(jié)

    df.nlargest()是一個DataFrame的方法,用于返回DataFrame中最大的n個值所在的行,通過調(diào)用nlargest()方法,我們返回了分?jǐn)?shù)最高的三個行,并按照降序排列,本文結(jié)合實例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2023-10-10
  • Python利用標(biāo)簽實現(xiàn)清理微信好友的自動化腳本

    Python利用標(biāo)簽實現(xiàn)清理微信好友的自動化腳本

    微信已經(jīng)成為我們?nèi)粘I钪胁豢苫蛉钡纳缃还ぞ?隨著使用時間的增長,我們的微信好友列表可能會變得越來越臃腫,所以本文為大家準(zhǔn)備了通過標(biāo)簽清理微信好友的Python自動化腳本,希望對大家有所幫助
    2024-12-12
  • python與php實現(xiàn)分割文件代碼

    python與php實現(xiàn)分割文件代碼

    本文給大家分享的是兩個分別使用python和php實現(xiàn)的將文件分割成小文件的代碼,非常的實用有需要的小伙伴可以參考下
    2017-03-03
  • Python?Requests庫知識匯總

    Python?Requests庫知識匯總

    這篇文章主要介紹了Python?Requests庫學(xué)習(xí)總結(jié),本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05
  • Python實現(xiàn)將不規(guī)范的英文名字首字母大寫

    Python實現(xiàn)將不規(guī)范的英文名字首字母大寫

    這篇文章給大家主要介紹的是利用map()函數(shù),把用戶輸入的不規(guī)范的英文名字,變?yōu)槭鬃帜复髮懀渌懙囊?guī)范名字。文中給出了三種解決方法,大家可以根據(jù)需要選擇使用,感興趣的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧。
    2016-11-11

最新評論

吴忠市| 北安市| 闵行区| 青海省| 靖西县| 精河县| 海城市| 安康市| 曲靖市| 抚松县| 同江市| 成安县| 延边| 延川县| 武汉市| 永春县| 黑龙江省| 泊头市| 保德县| 遂平县| 永德县| 昌平区| 南部县| 彭水| 兴义市| 正定县| 武川县| 莱西市| 兴山县| 曲麻莱县| 宜宾县| 盐源县| 汉源县| 北海市| 临澧县| 惠州市| 台北市| 会东县| 宜章县| 鄂伦春自治旗| 泸州市|