日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

    文章

    5610

    瀏覽量

    124663
  • 自然語言
    +關注

    關注

    1

    文章

    292

    瀏覽量

    14027
  • nlp
    nlp
    +關注

    關注

    1

    文章

    491

    瀏覽量

    23347

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    【CANopen實戰(zhàn)】如何實現(xiàn)PDO數(shù)據(jù)變化即刻發(fā)送(事件觸發(fā)模式詳解

    【CANopen實戰(zhàn)】如何實現(xiàn)PDO數(shù)據(jù)變化即刻發(fā)送(事件觸發(fā)模式詳解
    的頭像 發(fā)表于 04-09 14:39 ?208次閱讀
    【CANopen實戰(zhàn)】如何實現(xiàn)PDO數(shù)據(jù)變化即刻發(fā)送(事件觸發(fā)模式<b class='flag-5'>詳解</b>)

    導熱凝膠真實導熱系數(shù)測試標準詳解

    鉻銳特實業(yè)|東莞導熱膠廠家|本文詳解導熱凝膠真實導熱系數(shù)的含義、常見誤區(qū)及主流測試標準(重點ASTM D5470),幫助您辨別虛標數(shù)據(jù),選擇高性能熱界面材料,提升電子設備散熱可靠性。
    的頭像 發(fā)表于 03-30 15:01 ?344次閱讀
    導熱凝膠真實導熱系數(shù)測試標準<b class='flag-5'>詳解</b>

    ATX電源電路分析詳解開關電源的原理

    ATX電源電路分析詳解開關電源的原理,WORD版,圖文并茂,詳細說明各個元件在電路中的作用。適合初學者
    發(fā)表于 03-29 16:47 ?3次下載

    GINKGO MICRO 銀杏微半導體MOS管在汽車車燈的應用參數(shù)詳解與選型指南

    GINKGO MICRO 銀杏微半導體MOS管在汽車車燈的應用參數(shù)詳解與選型指南 一、概述 汽車車燈已全面進入LED/矩陣/像素化時代, MOSFET 作為車燈驅(qū)動、調(diào)光、保護、升壓/降壓核心開關
    的頭像 發(fā)表于 03-12 17:59 ?1186次閱讀
    GINKGO MICRO 銀杏微半導體MOS管在汽車車燈的應用參數(shù)<b class='flag-5'>詳解</b>與選型指南

    從“人機交互”到“數(shù)字預演”:詳解 HMI、SCADA 與虛擬調(diào)試的閉環(huán)架構(gòu)

    從“人機交互”到“數(shù)字預演”:詳解 HMI、SCADA 與虛擬調(diào)試的閉環(huán)架構(gòu)
    的頭像 發(fā)表于 03-05 11:36 ?373次閱讀
    從“人機交互”到“數(shù)字預演”:<b class='flag-5'>詳解</b> HMI、SCADA 與虛擬調(diào)試的閉環(huán)架構(gòu)

    高導熱灌封膠如何驗證?詳解導熱系數(shù)的精準測試方法與影響因素 | 鉻銳特實業(yè)

    高導熱灌封膠導熱系數(shù)如何精準驗證?本文詳解ASTM D5470等主流測試方法、影響實測值的關鍵因素及專業(yè)判斷標準,幫助您甄選真正可靠的產(chǎn)品。 | 鉻銳特實業(yè)
    的頭像 發(fā)表于 12-04 11:37 ?858次閱讀
    高導熱灌封膠如何驗證?<b class='flag-5'>詳解</b>導熱系數(shù)的精準測試方法與影響因素 | 鉻銳特實業(yè)

    【迅為工業(yè)RK3568穩(wěn)定可靠】itop-3568開發(fā)板Linux驅(qū)動開發(fā)實戰(zhàn):RK3568內(nèi)核模塊符號導出詳解

    【迅為工業(yè)RK3568穩(wěn)定可靠】itop-3568開發(fā)板Linux驅(qū)動開發(fā)實戰(zhàn):RK3568內(nèi)核模塊符號導出詳解
    的頭像 發(fā)表于 11-21 13:25 ?1739次閱讀
    【迅為工業(yè)RK3568穩(wěn)定可靠】itop-3568開發(fā)板Linux驅(qū)動開發(fā)實戰(zhàn):RK3568內(nèi)核模塊符號導出<b class='flag-5'>詳解</b>

    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

    【HarmonyOS 5】鴻蒙mPaaS詳解

    【HarmonyOS 5】鴻蒙mPaaS詳解 ##鴻蒙開發(fā)能力 ##HarmonyOS SDK應用服務##鴻蒙金融類應用 (金融理財# 一、mPaaS是什么? mPaaS 是 Mobile
    的頭像 發(fā)表于 07-11 18:23 ?1038次閱讀
    【HarmonyOS 5】鴻蒙mPaaS<b class='flag-5'>詳解</b>

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

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

    HarmonyOS 5 makeObserved接口詳解

    【HarmonyOS 5】makeObserved接口詳解 ##鴻蒙開發(fā)能力 ##HarmonyOS SDK應用服務##鴻蒙金融類應用 (金融理財# 一、makeObserved接口
    的頭像 發(fā)表于 06-16 17:58 ?813次閱讀

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

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

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

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

    SSH常用命令詳解

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

    【必看】開關電源中每一個元器件的計算+51頁圖文詳解

    開關電源的各個元器件怎么計算?損耗怎么估算?散熱器的大小怎么計算? 51頁圖文詳解,一文帶你弄懂! 純分享貼,有需要可以直接下載附件獲取完整資料! (如果內(nèi)容有幫助可以關注、點贊、評論支持一下哦~)
    發(fā)表于 05-12 16:20
    桓台县| 青海省| 通城县| 吉木乃县| 盖州市| 汝南县| 新津县| 陇川县| 沅陵县| 阿荣旗| 三穗县| 汤原县| 和平县| 邢台县| 邹城市| 正镶白旗| 略阳县| 台安县| 微山县| 仙桃市| 会东县| 绥江县| 房产| 包头市| 松原市| 乌拉特后旗| 昌江| 孟村| 榆林市| 民勤县| 冕宁县| 衡山县| 新龙县| 利津县| 宁武县| 万全县| 临武县| 中宁县| 梅州市| 翼城县| 桐城市|