Bert基礎(四)--解碼器(上)

1 理解解碼器

假設我們想把英語句子I am good(原句)翻譯成法語句子Je vais bien(目標句)。首先,將原句I am good送入編碼器,使編碼器學習原句,并計算特征值。在前文中,我們學習了編碼器是如何計算原句的特征值的。然后,我們把從編碼器求得的特征值送入解碼器。解碼器將特征值作為輸入,并生成目標句Je vais bien,如下圖所示。

Transformer的編碼器和解碼器
在編碼器部分,我們了解到可以疊加N個編碼器。同理,解碼器也可以有N個疊加在一起。為簡化說明,我們設定N=2。如圖所示,一個解碼器的輸出會被作為輸入傳入下一個解碼器。我們還可以看到,編碼器將原句的特征值(編碼器的輸出)作為輸入傳給所有解碼器,而非只給第一個解碼器。因此,一個解碼器(第一個除外)將有兩個輸入:一個是來自前一個解碼器的輸出,另一個是編碼器輸出的特征值。
在這里插入圖片描述

2 工作步驟

接下來,我們學習解碼器究竟是如何生成目標句的。當 t = 1 t=1 t=1時(t表示時間步),解碼器的輸入是<sos>,這表示句子的開始。解碼器收到<sos>作為輸入,生成目標句中的第一個詞,即Je,如圖所示。

在這里插入圖片描述
t = 2 t=2 t=2時,解碼器使用當前的輸入和在上一步( t = 1 t=1 t=1)生成的單詞,預測句子中的下一個單詞。在本例中,解碼器將<sos>和Je(來自上一步)作為輸入,并試圖生成目標句中的下一個單詞,如圖所示。
在這里插入圖片描述
同理,可以推斷出解碼器在 t = 3 t=3 t=3時的預測結果。此時,解碼器將<sos>、Je和vais(來自上一步)作為輸入,并試圖生成句子中的下一個單詞,如圖所示
在這里插入圖片描述
在每一步中,解碼器都將上一步新生成的單詞與輸入的詞結合起來,并預測下一個單詞。因此,在最后一步( t = 4 t=4 t=4),解碼器將<sos>、Je、vais和bien作為輸入,并試圖生成句子中的下一個單詞,如圖所示。
在這里插入圖片描述
從上圖中可以看到,一旦生成表示句子結束的<eos>標記,就意味著解碼器已經完成了對目標句的生成工作。

3 位置編碼

在編碼器部分,我們將輸入轉換為嵌入矩陣,并將位置編碼添加到其中,然后將其作為輸入送入編碼器。同理,我們也不是將輸入直接送入解碼器,而是將其轉換為嵌入矩陣,為其添加位置編碼,然后再送入解碼器。

如下圖所示,假設在時間步 t = 2 t=2 t=2,我們將輸入轉換為嵌入(我們稱之為嵌入值輸出,因為這里計算的是解碼器在以前的步驟中生成的詞的嵌入),將位置編碼加入其中,然后將其送入解碼器。
在這里插入圖片描述
接下來,讓我們深入了解解碼器的工作原理。一個解碼器模塊及其所有的組件如圖:
在這里插入圖片描述
從圖中可以看到,解碼器內部有3個子層。

  • 帶掩碼的多頭注意力層
  • 多頭注意力層
  • 前饋網絡層

與編碼器模塊相似,解碼器模塊也有多頭注意力層和前饋網絡層,但多了帶掩碼的多頭注意力層。現在,我們對解碼器有了基本的認識。接下來,讓我們先詳細了解解碼器的每個組成部分,然后從整體上了解它的工作原理。

4 帶掩碼的多頭注意力層

以英法翻譯任務為例,假設訓練數據集樣本如圖所示
在這里插入圖片描述
數據集由兩部分組成:原句和目標句。在前面,我們學習了解碼器在測試期間是如何在每個步驟中逐字預測目標句的。

在訓練期間,由于有正確的目標句,解碼器可以直接將整個目標句稍作修改作為輸入。解碼器將輸入的<sos>作為第一個標記,并在每一步將下一個預測詞與輸入結合起來,以預測目標句,直到遇到<eos>標記為止。因此,我們只需將<sos>標記添加到目標句的開頭,再將整體作為輸入發送給解碼器。

比如要把英語句子I am good轉換成法語句子Je vais bien。我們只需在目標句的開頭加上<sos>標記,并將<sos>Je vais bien作為輸入發送給解碼器。解碼器將預測輸出為Je vais bien<eos>,如圖所示。
在這里插入圖片描述
為什么我們需要輸入整個目標句,讓解碼器預測位移后的目標句呢?下面來解答。

首先,我們不是將輸入直接送入解碼器,而是將其轉換為嵌入矩陣(輸出嵌入矩陣)并添加位置編碼,然后再送入解碼器。假設添加輸出嵌入矩陣和位置編碼后得到圖所示的矩陣X。

在這里插入圖片描述
然后,將矩陣X送入解碼器。解碼器中的第一層是帶掩碼的多頭注意力層。這與編碼器中的多頭注意力層的工作原理相似,但有一點不同。

為了運行自注意力機制,我們需要創建三個新矩陣,即查詢矩陣Q、鍵矩陣K和值矩陣V。由于使用多頭注意力層,因此我們創建了h個查詢矩陣、鍵矩陣和值矩陣。對于注意力頭 i i i的查詢矩陣 Q i Q_i Qi?、鍵矩陣 K i K_i Ki?和值矩陣 V i V_i Vi?,可以通過將X分別乘以權重矩陣 W i Q , W i K , W i V W_i^Q, W_i^K, W_i^V WiQ?,WiK?,WiV?而得。

下面,讓我們看看帶掩碼的多頭注意力層是如何工作的。假設傳給解碼器的輸入句是<sos>Je vais bien。我們知道,自注意力機制將一個單詞與句子中的所有單詞聯系起來,從而提取每個詞的更多信息。但這里有一個小問題。在測試期間,解碼器只將上一步生成的詞作為輸入。

比如,在測試期間,當 t = 2 t=2 t=2時,解碼器的輸入中只有[<sos>, Je],并沒有任何其他詞。因此,我們也需要以同樣的方式來訓練模型。模型的注意力機制應該只與該詞之前的單詞有關,而不是其后的單詞。要做到這一點,我們可以掩蓋后邊所有還沒有被模型預測的詞。

比如,我們想預測與<sos>相鄰的單詞。在這種情況下,模型應該只看到<sos>,所以我們應該掩蓋<sos>后邊的所有詞。再比如,我們想預測Je后邊的詞。在這種情況下,模型應該只看到Je之前的詞,所以我們應該掩蓋Je后邊的所有詞。其他行同理,如圖所示。
在這里插入圖片描述
像這樣的掩碼有助于自注意力機制只注意模型在測試期間可以使用的詞。但我們究竟如何才能實現掩碼呢?我們學習過對于一個注意力頭 Z 1 Z_1 Z1?的注意力矩陣[插圖]的計算方法,公式如下。
Z i = s o f t m a x ( Q i ? K i T d k ) V i Z_i = softmax(\frac{Q_i·K_i^T}{\sqrt{d_k}})V_i Zi?=softmax(dk? ?Qi??KiT??)Vi?

計算注意力矩陣的第1步是計算查詢矩陣與鍵矩陣的點積。下圖顯示了點積結果。需要注意的是,這里使用的數值是隨機的,只是為了方便理解。

在這里插入圖片描述
第二步是將 Q i ? K i T Q_i·K_i^T Qi??KiT?矩陣除以鍵向量維度的平方根 d k \sqrt{d_k} dk? ?。假設下圖是 Q i ? K i T / d k Q_i·K_i^T/\sqrt{d_k} Qi??KiT?/dk? ?的結果。
在這里插入圖片描述
第3步,我們對上圖所得的矩陣應用softmax函數,并將分值歸一化。但在應用softmax函數之前,我們需要對數值進行掩碼轉換。以矩陣的第1行為例,為了預測<sos>后邊的詞,模型不應該知道<sos>右邊的所有詞(因為在測試時不會有這些詞)。因此,我們可以用 ? ∞ - \infty ?掩蓋<sos>右邊的所有詞,如圖所示。
在這里插入圖片描述
接下來,讓我們看矩陣的第2行。為了預測Je后邊的詞,模型不應該知道Je右邊的所有詞(因為在測試時不會有這些詞)。因此,我們可以用 ? ∞ - \infty ?掩蓋Je右邊的所有詞,如圖所示。
在這里插入圖片描述
同理,我們可以用 ? ∞ - \infty ?掩蓋vais右邊的所有詞,如圖所示。
在這里插入圖片描述
現在,我們可以將softmax函數應用于前面的矩陣,并將結果與值矩陣 V i V_i Vi?相乘,得到最終的注意力矩陣 Z i Z_i Zi?。同樣,我們可以計算h個注意力矩陣,將它們串聯起來,并將結果乘以新的權重矩陣 W 0 W_0 W0?,即可得到最終的注意力矩陣M,如下所示
M = C o n c a t e n a t e ( Z 1 , Z 2 , … … , Z h ) W 0 M = Concatenate(Z_1, Z_2,……,Z_h)W_0 M=Concatenate(Z1?,Z2?,……,Zh?)W0?

最后,我們把注意力矩陣M送到解碼器的下一個子層,也就是另一個多頭注意力層。

待更。。。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/697327.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/697327.shtml
英文地址,請注明出處:http://en.pswp.cn/news/697327.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

代碼隨想錄算法訓練營第四十天|343. 整數拆分、96. 不同的二叉搜索樹。

343. 整數拆分 題目鏈接&#xff1a;整數拆分 題目描述&#xff1a; 給定一個正整數 n &#xff0c;將其拆分為 k 個 正整數 的和&#xff08; k > 2 &#xff09;&#xff0c;并使這些整數的乘積最大化。 返回 你可以獲得的最大乘積 。 解題思路&#xff1a; 1、確定dp數組…

flink內存管理,設置思路,oom問題,一文全

flink內存管理 1 內存分配1.1 JVM 進程總內存&#xff08;Total Process Memory&#xff09;1.2 Flink 總內存&#xff08;Total Flink Memory&#xff09;1.3 JVM 堆外內存&#xff08;JVM Off-Heap Memory&#xff09;1.4 JVM 堆內存&#xff08;JVM Heap Memory&#xff09;…

運維的利器–監控–zabbix–第二步:建設–部署zabbix agent

文章目錄 監控客戶端部署及添加主機一、在 zabbix-server 安裝客戶端二、在本機和其他linux主機安裝zabbix agent客戶端1、安裝2、配置3、啟動并開機自啟4、添加主機創建主機組創建主機等一會或重啟zabbix-server查看配置是否成功 三、在其他windows上安裝zabbix agent客戶端下…

主流的開發語言和開發環境介紹

個人淺見&#xff0c;不喜勿噴&#xff0c;謝謝 軟件開發是一個涉及多個方面的復雜過程&#xff0c;其中包括選擇合適的編程語言和開發環境。編程語言是軟件開發的核心&#xff0c;它定義了程序員用來編寫指令的語法和規則。而開發環境則提供了編寫、測試和調試代碼的工具和平臺…

Microsoft的PromptBench可以做啥?

目錄 PromptBench簡介 PromptBench的快速模型性能評估 PromptBench數據集介紹 PromptBench模型介紹 PromptBench模型加載遇到的問題 第一次在M1 Mac上加載模型 vicuna和llama系列模型 PromptBench各個模型加載情況總結 PromptBench的Prompt快速工程 chain of thought…

WebService學習,wsdl文件詳解

目錄 第一章、起因1.1&#xff09;學習原因1.2&#xff09;提問的過程&#xff08;逐步提出問題&#xff09;1、&#xff1f;wsdl鏈接的含義&#xff0c;有什么作用&#xff1f;2、什么是wsdl文檔&#xff1f;3、如何閱讀wsdl文件&#xff1f;4、wsdl文件有什么作用&#xff1f…

基于springboot+vue的智慧社區系統(前后端分離)

博主主頁&#xff1a;貓頭鷹源碼 博主簡介&#xff1a;Java領域優質創作者、CSDN博客專家、阿里云專家博主、公司架構師、全網粉絲5萬、專注Java技術領域和畢業設計項目實戰&#xff0c;歡迎高校老師\講師\同行交流合作 ?主要內容&#xff1a;畢業設計(Javaweb項目|小程序|Pyt…

每周編輯精選|MathPile 數學推理語料庫開源、協和眼科牽頭用 AI 助力 13 種眼底疾病檢測

近日&#xff0c;上海交通大學生成式人工智能研究實驗室 (GAIR)&#xff0c;開源了專為數學領域量身定制的高質量且多樣化的預訓練數據集 MathPile&#xff0c;及其可商用版本 MathPile-Commercial&#xff0c;現在在 hyper.ai 官網可以下載啦&#xff01;還有更多如 MathVista…

(十四)【Jmeter】線程(Threads(Users))之開放模型線程組(Open Model Thread Group)

簡述 操作路徑如下: 開放模型線程組(Open Model Thread Group) 是 JMeter 5.5 版本中引入的一個新特性,它允許用戶創建具有可變負載的負載配置文件。相較于傳統的線程組,開放模型線程組提供了更多的靈活性和動態調整的能力。 優點: 靈活性:允許測試人員根據測試需求動…

python 提取PDF文字

使用pdfplumber&#xff0c;不能提取掃描的pdf和插入的圖片。 import pdfplumberfile_path rD:\UserData\admindesktop\官方文檔\1903_Mesh-Models-Overview_FINAL.pdf with pdfplumber.open(file_path) as pdf:page pdf.pages[0]print(page.extract_text()) # 所以文字prin…

Verilog刷題筆記33

題目&#xff1a; You are given a four-bit input vector in[3:0]. We want to know some relationships between each bit and its neighbour: out_both: Each bit of this output vector should indicate whether both the corresponding input bit and its neighbour to t…

Kafka3.x進階

來源&#xff1a;B站 目錄 Kafka生產者生產經驗——生產者如何提高吞吐量生產經驗——數據可靠性生產經驗——數據去重數據傳遞語義冪等性生產者事務 生產經驗——數據有序生產經驗——數據亂序 Kafka BrokerKafka Broker 工作流程Zookeeper 存儲的 Kafka 信息Kafka Broker 總…

戲曲文化苑|戲曲文化苑小程序|基于微信小程序的戲曲文化苑系統設計與實現(源碼+數據庫+文檔)

戲曲文化苑小程序目錄 目錄 基于微信小程序的戲曲文化苑系統設計與實現 一、前言 二、系統功能設計 三、系統實現 1、微信小程序前臺 2、管理員后臺 &#xff08;1&#xff09;戲曲管理 &#xff08;2&#xff09;公告信息管理 &#xff08;3&#xff09;公告類型管理…

PostgreSQL 的實體化視圖介紹

PostgreSQL 實體化視圖提供一個強大的機制&#xff0c;通過預先計算并將查詢結果集存儲為物理表來提高查詢性能。本教程將使用 DVD Rental Database 數據庫作為演示例子&#xff0c;指導你在 PostgreSQL中創建實體化視圖。 了解實體化視圖 實體化視圖是查詢結果集的快照&…

docker安裝PostGIS擴展

去docker倉庫查找你想要安裝的鏡像版本&#xff0c;并pull下來 我下載的版本&#xff1a; [rootlocalhost ~]# docker pull postgis/postgis:12-3.2運行容器 [rootlocalhost ~]# docker run --name postgis --privilegedtrue --restartalways -e POSTGRES_USER12345678 -e P…

【高德地圖】Android高德地圖初始化定位并顯示小藍點

&#x1f4d6;第3章 初始化定位并顯示小藍點 ?第1步&#xff1a;配置AndroidManifest.xml?第2步&#xff1a;設置定位藍點?第3步&#xff1a;初始化定位?完整代碼 ?第1步&#xff1a;配置AndroidManifest.xml 在application標簽下聲明Service組件 <service android:n…

FPS游戲之漫談截幀技術

什么是截幀技術 簡而言之就是截取當前屏幕的內容&#xff0c;然后一般是以圖片的形式存入本地 為什么需要這個技術 因為有需求 比如我們需要把我牛逼的戰績炫耀下&#xff0c;是不是以圖文的形式分享到朋友圈是不是最直觀&#xff1f;&#xff1f;&#xff1f; 在Unity引擎中…

Aigtek高壓放大器是什么東西做的

在許多電子應用中&#xff0c;需要將低電壓信號放大到較高電壓以滿足特定的需求。為了實現這個目標&#xff0c;高壓放大器被廣泛采用。高壓放大器是一種專用電子設備&#xff0c;使用特定的電路和器件來增益輸入信號的電壓。它通常由以下幾個主要組成部分構成。 電源供應 高壓…

Linux編譯器---gcc/g++使用詳解

目錄 前言 gcc/g介紹 gcc/g的編譯指令&#xff08;以gcc為例&#xff09; ?編輯 gcc選項 預處理(進行宏替換) 編譯&#xff08;生成匯編&#xff09; 匯編&#xff08;生成機器可識別代碼&#xff09; 鏈接&#xff08;生成可執行文件或庫文件&#xff09; 函數庫 概念 …

網絡金融治理模式下第三方支付風險與應對路徑

隨著經濟社會的高速發展&#xff0c;消費模式日益多樣化&#xff0c;其中&#xff0c;第三方支付作為一種便捷的消費支付模式&#xff0c;在順應時代發展潮流中應運而生。這種支付模式通過中國人民銀行批準&#xff0c;持有《支付業務許可證》&#xff0c;并與銀行簽約&#xf…