chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

positional encoding詳解

深度學習自然語言處理 ? 來源:深度學習自然語言處理 ? 作者:CS的陋室 ? 2021-02-10 17:12 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

近期我會一連幾篇談談bert中的關鍵細節(jié),這個position encoding是我看到的bert(實質(zhì)上是transformer中提出的)中最為驚喜的但是卻被很多人忽略(可以理解為媒體鼓吹最少的)一個細節(jié),這里給大家談談。

什么是position encoding

顧名思義,就是基于位置的一套詞嵌入方法,說得簡單點,就是對于一個句子,都有對應的一個向量。

position encoding的收益

我感覺要做一個事情,首先還是要看他的出發(fā)點和收益,說白了就是優(yōu)點是啥,做這個的目標是啥,這樣我們才知道怎么做。

回頭看看CNN結(jié)構(gòu)、RNN甚至是transformer的self-attention,其實都沒有特別關注位置信息,而實際上,我們卻是需要去關注的,畢竟作為一門語言,他大都有比較嚴謹?shù)恼Z法結(jié)構(gòu),特定詞匯還真的會出現(xiàn)在特定位置,這是非常有意思的,來看看例子(來源于知乎):

I like this movie because it doesn't have an overhead history.I don't like this movie because it has an overhead history.

從情感上,上面是正面,下面是負面,這個非常顯而易見,因為這個否定句,從實體提取的角度都有movie和history,無論是哪個任務,都可以看到一個語法結(jié)構(gòu)中存在的位置信息。

對CNN,只能考慮到固定前后的局部信息,RNN能考慮稍微長期的信息,LSTM是有重點的記錄,Transformer只能考慮到全局的信息,尤其在bert中,只用了transformer encoder,模型上就完全喪失對位置信息的描述了,因此引入基于位置的特征就可能在特定任務中產(chǎn)生收益。

換個角度再看一個例子:

I believe I can be the best.

對于self attention,如果沒有positional encoding,兩個i的輸出將會一樣,但是我們知道,這兩個i是存在區(qū)別的,不是在指代上,而是含義上,第一個i是觀點的發(fā)出者,“不要你覺得,我要我覺得”,第二個i是觀點的對象,“認為我會是最棒的,不是別人”,所以從語義上兩者就有所區(qū)別了,權重向量完全一樣可就有問題了吧。這也是缺少位置信息的缺憾。

position embedding怎么做

首先,最簡單的模式就是對詞向量矩陣直接加一層全連接層,就是全連接層。就真的是這么簡單!

d3fb8444-603d-11eb-8b86-12bb97331649.jpg

對于每個位置的詞向量,都穩(wěn)定的乘以一個穩(wěn)定的向量,就如上面所示,第1個位置一定對應positonal embedding的第一個向量,那這組向量抽出來,不是positional embedding是啥。

但當然的,這里就有很大的問題,那就是這只是絕對位置,看上面第一個例子(我再搬運一遍):

I like this movie because it doesn't have an overhead history.I don't like this movie because it has an overhead history.

這里的like 和 don't like可就不是一個位置了吧,所以絕對位置肯定是有問題的,那么就要引入相對位置的概念了。來看看transformer論文里面是怎么說的(我把解釋也給大家搬過來了):

d463970a-603d-11eb-8b86-12bb97331649.jpg

這里用的是兩種三角函數(shù),可以說是非常巧妙了,我們來慢慢分析。上代碼!

import matplotlib.pyplot as plt

import math

def positional_enc(i,pos):

return math.sin(pos /10000**(i/100))

x = []

for idx in range(10):

tmp_x = list(range(1,100))

tmp_y = [positional_enc(i, idx) for i in tmp_x]

plt.plot(tmp_x,tmp_y,label=str(idx))

plt.legend(loc = 'upper right')

plt.show()

代碼跑出來是這樣的:

d50345ca-603d-11eb-8b86-12bb97331649.jpg

橫坐標是維數(shù)上的每個值,縱坐標是對應的sin值,圖例對應句子中的每個位置。

首先看維數(shù)位置-sin值之間的關系,很明顯,我們沒有發(fā)現(xiàn)周期性,最終往0處收斂,我們也可以知道了,在這種emcoding下,其實維數(shù)沒必要太高了。

而對于位置-sini值之間的關系,可以整個曲線是會朝著右邊移動的,從權重角度看,實質(zhì)上就是每一個維度都會有一個比較看重的句子位置,其他位置說白了就是不看了,而前面的甚至可能為負,主要原因是要拋棄以前的信息,這樣多個維度就能把多個位置都當做了重點來看。

周期性去了哪里呢,其實在這里,再來上代碼:

import matplotlib.pyplot as plt

import math

def positional_emb(i,pos):

return math.sin(pos /10000**(i/100))

tmp_x = list(range(20))

tmp_y = [positional_emb(10, i) for i in tmp_x]

plt.plot(tmp_x,tmp_y)

plt.show()

得到了有周期性的圖。

d5743ad2-603d-11eb-8b86-12bb97331649.png

周期性只體現(xiàn)在位置和整個函數(shù)結(jié)果的關系,而具體的波長,其實是由positional encoding向量決定的。

不得不說,這個函數(shù)的設計可謂是對現(xiàn)實場景有了十分充分的理解,抽象非常精準。

預測效果

首先來看看兩種positional encoding的具體效果,來自transformer的對比。

d5f5d4ca-603d-11eb-8b86-12bb97331649.jpg

主要看E、base和big。其實可以看到posiitional emb本身的效果其實還行,與base相當,說明還是有不小收益的。

來看看源碼

原理是看完了,來看看源碼吧。

def positional_encoding(inputs,

maxlen,

masking=True,

scope="positional_encoding"):

'''Sinusoidal Positional_Encoding. See 3.5

inputs: 3d tensor. (N, T, E)

maxlen: scalar. Must be >= T

masking: Boolean. If True, padding positions are set to zeros.

scope: Optional scope for `variable_scope`.

returns

3d tensor that has the same shape as inputs.

'''

E = inputs.get_shape().as_list()[-1] # static

N, T = tf.shape(inputs)[0], tf.shape(inputs)[1] # dynamic

with tf.variable_scope(scope, reuse=tf.AUTO_REUSE):

# position indices

position_ind = tf.tile(tf.expand_dims(tf.range(T), 0), [N, 1]) # (N, T)

# First part of the PE function: sin and cos argument

position_enc = np.array([

[pos / np.power(10000, (i-i%2)/E) for i in range(E)]

for pos in range(maxlen)])

# Second part, apply the cosine to even columns and sin to odds.

position_enc[:, 0::2] = np.sin(position_enc[:, 0::2]) # dim 2i

position_enc[:, 1::2] = np.cos(position_enc[:, 1::2]) # dim 2i+1

position_enc = tf.convert_to_tensor(position_enc, tf.float32) # (maxlen, E)

# lookup

outputs = tf.nn.embedding_lookup(position_enc, position_ind)

# masks

if masking:

outputs = tf.where(tf.equal(inputs, 0), inputs, outputs)

return tf.to_float(outputs)

本身公式上沒有想象的復雜,但是這里面其實展現(xiàn)了很多python相關的技巧。

這里的計算并非全都使用的tf,對positionenc,前面用numpy進行計算,然后用embeddinglookup的方式引入。

position_enc[:,0::2]和position_enc[:,1::2]來自numpy語法,避免了寫循環(huán)和條件語句就能夠完成奇數(shù)偶數(shù)計算。

另外是有很多可能在各種教材或者教程中沒有的函數(shù)工具,大家可以多看看學學。

tf.AUTO_REUSE:批量化共享變量作用域的方法。

tf.tile():張量擴展,對當前張量內(nèi)的數(shù)據(jù)進行一定規(guī)則的復制,保證輸出張量維度不變。

責任編輯:xj

原文標題:bert之我見 - positional encoding

文章出處:【微信公眾號:深度學習自然語言處理】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 深度學習
    +關注

    關注

    73

    文章

    5589

    瀏覽量

    123883
  • 自然語言
    +關注

    關注

    1

    文章

    292

    瀏覽量

    13913
  • nlp
    nlp
    +關注

    關注

    1

    文章

    491

    瀏覽量

    23182

原文標題:bert之我見 - positional encoding

文章出處:【微信號:zenRRan,微信公眾號:深度學習自然語言處理】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    STM32CUBEIDE 1.19.0 自動生成編碼 原有工程GBK編碼格式中文亂碼怎么解決?

    在1.18.1版本中既有此問題,當時在網(wǎng)上搜索通過添加環(huán)境變量:變量名為“JAVA_TOOL_OPTIONS”,變量值為“-Dfile.encoding=GBK”,即可解決。軟件自動升級后,發(fā)現(xiàn)
    發(fā)表于 08-12 07:23

    達夢數(shù)據(jù)庫常用管理SQL命令詳解

    達夢數(shù)據(jù)庫常用管理SQL命令詳解
    的頭像 發(fā)表于 06-17 15:12 ?6525次閱讀
    達夢數(shù)據(jù)庫常用管理SQL命令<b class='flag-5'>詳解</b>

    【HarmonyOS 5】鴻蒙中的UIAbility詳解(三)

    【HarmonyOS 5】鴻蒙中的UIAbility詳解(三) ##鴻蒙開發(fā)能力 ##HarmonyOS SDK應用服務##鴻蒙金融類應用 (金融理財# 一、前言 本文是鴻蒙中的UIAbility
    的頭像 發(fā)表于 06-14 22:32 ?455次閱讀

    安徽京準:北斗衛(wèi)星同步時鐘的安裝與調(diào)試詳解

    安徽京準:北斗衛(wèi)星同步時鐘的安裝與調(diào)試詳解
    的頭像 發(fā)表于 06-05 10:08 ?1082次閱讀
    安徽京準:北斗衛(wèi)星同步時鐘的安裝與調(diào)試<b class='flag-5'>詳解</b>

    SSH常用命令詳解

    SSH常用命令詳解
    的頭像 發(fā)表于 06-04 11:30 ?1698次閱讀

    SMA接頭制造工藝詳解:精密加工技術與實現(xiàn)策略

    SMA接頭制造工藝詳解:精密加工技術與實現(xiàn)策略
    的頭像 發(fā)表于 04-26 09:22 ?512次閱讀
    SMA接頭制造工藝<b class='flag-5'>詳解</b>:精密加工技術與實現(xiàn)策略

    芯片新關稅涉及的品牌/標簽/產(chǎn)地—詳解

    芯片新關稅涉及的品牌/標簽/產(chǎn)地—詳解
    的頭像 發(fā)表于 04-16 17:44 ?837次閱讀
    芯片新關稅涉及的品牌/標簽/產(chǎn)地—<b class='flag-5'>詳解</b>

    寬帶收發(fā)器IC ADI ADRV9040用戶手冊文檔詳解

    寬帶收發(fā)器IC ADI ADRV9040用戶手冊文檔詳解
    的頭像 發(fā)表于 03-25 19:23 ?1150次閱讀
    寬帶收發(fā)器IC  ADI ADRV9040用戶手冊文檔<b class='flag-5'>詳解</b>

    放大器電路原理及放大器電路圖內(nèi)容詳解

    該文檔為放大器電路原理及放大器電路圖內(nèi)容詳解資料,講解的還不錯,感興趣的可以下載看看~ (如果內(nèi)容有幫助可以關注、點贊、評論支持一下哦~)
    發(fā)表于 03-20 11:55

    SVPWM的原理及法則推導和控制算法詳解

    ,而且使直流母線電壓的利用率有了很大提高,且更易于實現(xiàn)數(shù)字化。下面將對該算法進行詳細分析闡述。 文章過長,請點擊下方可查閱*附件:SVPWM的原理及法則推導和控制算法詳解.pdf
    發(fā)表于 03-14 14:51

    AMAZINGIC晶焱科技:詳解RF端口如何選擇TVS啟動電壓

    AMAZINGIC晶焱科技:詳解RF端口如何選擇TVS啟動電壓
    的頭像 發(fā)表于 02-20 10:09 ?857次閱讀
    AMAZINGIC晶焱科技:<b class='flag-5'>詳解</b>RF端口如何選擇TVS啟動電壓

    電力電子中的坐標變換詳解

    電力電子中的坐標變換詳解 clark變換&park變換
    發(fā)表于 02-17 15:28 ?1次下載

    Kubernetes Pod常用管理命令詳解

    Kubernetes Pod常用管理命令詳解
    的頭像 發(fā)表于 02-17 14:06 ?968次閱讀
    Kubernetes Pod常用管理命令<b class='flag-5'>詳解</b>

    精密空調(diào)操作使用方法詳解

    精密空調(diào)操作使用方法詳解
    的頭像 發(fā)表于 02-10 14:44 ?1865次閱讀
    精密空調(diào)操作使用方法<b class='flag-5'>詳解</b>

    詳解RF端口如何選擇TVS啟動電壓

    AMAZINGIC晶焱科技技術應用:詳解RF端口如何選擇TVS啟動電壓
    的頭像 發(fā)表于 02-05 16:19 ?1359次閱讀
    <b class='flag-5'>詳解</b>RF端口如何選擇TVS啟動電壓