BERT模型引入及詳解

BERT模型引入及詳解

參考

  • 視頻:

    • ELMo 模型(雙向 LSTM 模型解決詞向量多義問題
  • 博客:

    • BERT模型
    • BERT詳解:概念、原理與應用
    • 一文讀懂BERT

ELMo模型

參考:

  • 視頻:
    • ELMo模型(雙向LSTM模型解決詞向量多義問題)
  • 博客:
    • 【自然語言處理】ELMo, GPT等經典模型的介紹與對比

引入

Word Embedding中,詞語都是由一個唯一的詞向量進行表示的,不根據句子改變而改變

也就是說,Word Embedding表示詞的方法是靜態的,無法對多義詞進行處理

對于這個例子,盡管不同序列中的bank的上下文不同,但經語言模型訓練時,無論什么序列經過Word2Vec,都是對bank這個詞進行預測,因此占用的是嵌入矩陣中的同一行參數;這樣會導致不同的語義被壓縮到同一個Word Embedding空間,進而導致Word Embedding無法區分多義詞

核心思想

事先用語言模型訓練好了一個單詞的Word Embedding,但是它此時還無法區分多義詞語義,這沒關系

當使用Word Embedding時,此時單詞已經具有特定的上下文,這個時候我可以根據上下文單詞的語義再去調整單詞的 Word Embedding 表示,這樣經過調整后的 Word Embedding 更能表達單詞在這個上下文中的具體含義

ELMo模型的核心思想就是:根據當前上下文對Word Embedding進行動態調整

注意:ELMo是對Word2Vec的改進,模型的主要任務還是在于詞向量而不是預測生成

不只是訓練一個嵌入矩陣Q,還要把當前詞的上下文信息融入到這個Q矩陣

兩階段過程

  • 利用語言模型做預訓練
  • 做下游任務時,從預訓練網絡中提取對應單詞的網絡各層的Word Embedding作為新特征補充到下游任務中

架構

預訓練過程

分為三部分:

  • Embedding模塊 - 提取單詞特征
  • 雙層雙向LSTM模塊
    • 第一層:提取句法特征
    • 第二層:提取語義特征
  • 詞向量表征模塊
    • 使用若干參數融合每一層提取到的特征信息
Embedding模塊

使用CNN去提取輸入序列的文字特征,得到一個靜態的Word Embedding作為整個網絡的底層輸入

雙層雙向LSTM模塊

當前預訓練語言模型的任務是:
根據當前詞wiw_iwi?的上下文去正確預測單詞wiw_iwi?,wiw_iwi?之前的單詞序列Context-before稱為上文,wiw_iwi?之后的單詞序列Context-after稱為下文

圖中左側的雙層LSTM稱為前向LSTM網絡,輸入順序從左至右,輸入除了wi以外的上文除了w_i以外的上文除了wi?以外的上文

對于n個w,語言模型通過前k?1個w來計算第k個w出現的概率,構成雙層前向LSTMP(w1,w2,?,wn)=∏k=1nP(wk∣w1,?,wk?1)\begin{align} 對于n個w,語言模型通過前k-1個w來計算第k個w出現的概率,構成雙層前向LSTM\\ P(w_1,w_2,\cdots,w_n) = \prod_{k=1}^{n}P(w_k | w_1,\cdots,w_{k-1}) \end{align} 對于nw,語言模型通過前k?1w來計算第kw出現的概率,構成雙層前向LSTMP(w1?,w2?,?,wn?)=k=1n?P(wk?w1?,?,wk?1?)??

圖中右側的雙層LSTM稱為反向LSTM網絡,輸入順序從右至左,輸入除了wi以外的逆序下文除了w_i以外的逆序下文除了wi?以外的逆序下文

語言模型通過后n?k個w來計算第k個w出現的概率,構成雙層反向LSTMP(w1,w2,?,wn)=∏k=1nP(wk∣wk+1,?,wn)\begin{align} 語言模型通過后n-k個w來計算第k個w出現的概率,構成雙層反向LSTM\\ P(w_1,w_2,\cdots,w_n) = \prod_{k=1}^{n}P(w_k | w_{k+1},\cdots,w_{n}) \end{align} 語言模型通過后n?kw來計算第kw出現的概率,構成雙層反向LSTMP(w1?,w2?,?,wn?)=k=1n?P(wk?wk+1?,?,wn?)??
ELMo的訓練目標是最大化下面這個函數

∑k=1n(P(wk∣w1,?,wk?1;Θx,Θ→LSTM,Θs)+P(wk∣wk+1,?,wn;Θx,Θ←LSTM,Θs))Θx:詞的輸入表示參數(CNN中的參數)Θ→LSTM:雙層前向LSTM的參數Θ←LSTM:雙層反向LSTM的參數Θs:輸出層參數\begin{align} \sum_{k=1}^{n}(P(w_k|w_1,\cdots,w_{k-1};\Theta_{x},{\overrightarrow{\Theta}_{LSTM}},\Theta_{s})+P(w_k|w_{k+1},\cdots,w_{n};\Theta_{x},{{\overleftarrow{\Theta}}_{LSTM}},\Theta_{s}))\\ \Theta_{x}:詞的輸入表示參數(CNN中的參數)\\ \overrightarrow{\Theta}_{LSTM}:雙層前向LSTM的參數\\ \overleftarrow{\Theta}_{LSTM}:雙層反向LSTM的參數\\ \Theta_{s}:輸出層參數\\ \end{align} k=1n?(P(wk?w1?,?,wk?1?;Θx?,ΘLSTM?,Θs?)+P(wk?wk+1?,?,wn?;Θx?,ΘLSTM?,Θs?))Θx?:詞的輸入表示參數(CNN中的參數)ΘLSTM?:雙層前向LSTM的參數ΘLSTM?:雙層反向LSTM的參數Θs?:輸出層參數??

詞向量表征模塊

對于每個w,通過一個L層的雙向LSTM網絡,可以計算出2L+1個表示向量對于第k個詞wk,第j層的雙向LSTM網絡Rk={xkLM,hk,jLM→,hk,jLM←∣j=1,?,L}={hk,j∣j=1,2,?,L}hk,jLM→:第j層正向LSTM對wk的隱藏狀態hk,jLM←:第j層反向LSTM對wk的隱藏狀態\begin{align} 對于每個w,通過一個L層的雙向LSTM網絡,可以計算出2L+1個表示向量\\ 對于第k個詞w_k,第j層的雙向LSTM網絡\\ R_k = \{{x_k^{LM},\overrightarrow{h_{k,j}^{LM}},\overleftarrow{h_{k,j}^{LM}}}\ \ |\ \ j=1,\cdots,L\} = \{h_{k,j}\ \ |\ \ j=1,2,\cdots,L\}\\ \overrightarrow{h_{k,j}^{LM}}:第j層正向LSTM對w_k的隱藏狀態\\ \overleftarrow{h_{k,j}^{LM}}:第j層反向LSTM對w_k的隱藏狀態 \end{align} 對于每個w,通過一個L層的雙向LSTM網絡,可以計算出2L+1個表示向量對于第k個詞wk?,j層的雙向LSTM網絡Rk?={xkLM?,hk,jLM??,hk,jLM??????j=1,?,L}={hk,j?????j=1,2,?,L}hk,jLM??:j層正向LSTMwk?的隱藏狀態hk,jLM??:j層反向LSTMwk?的隱藏狀態??

Feature-based Pre-Training

上圖展示了下游任務的使用過程

比如我們的下游任務是QA,此時對于問句X:

  • 將這個X作為預訓練好的ELMo網絡的輸入,這樣X中的每個單詞在ELMo網絡中都能獲取對應的3個embedding
  • 分別給予這3個embedding權重a,這個權重可以學習得來;
  • 根據各自權重累加求和,將三個 embedding 整合成一個
  • 將整合后的embedding作為X句在自己任務中的對應單詞的輸入,以此作為補充的新特征給下游任務使用

因為 ELMo 給下游提供的是每個單詞的特征形式,所以這一類預訓練的方法被稱為 “Feature-based Pre-Training”

GPT模型

GPT(Generative Pre-Training)是指生成式的預訓練模型

不同于ELMo模型的基于特征融合的預訓練方法,GPT采用了一種叫 Fine-tuning(微調) 的預訓練方法

GPT也采用兩階段過程:

  • 階段1:利用語言模型進行預訓練
  • 階段2:通過Fine-tuning模型解決下游任務

預訓練

這個結構乍一看,和ELMo模型很像,但是有以下不同:

  • 特征抽取器使用了雙層Transfomer,而不是雙層LSTM,有利于學習長序列和并行運行
  • GPT使用單向語言模型;特征抽取時不同時使用上文下文,僅使用上文預測;而ELMo的雙層雙向LSTM則是同時使用上文和下文進行預測

缺點:從現在來看,使用單向語言模型,沒有融合單詞的下文,在一些應用場景受限,比如完成閱讀理解任務,這個任務允許同時看到上文和下文來進行決策

Fine-tuning解決下游任務

  • 對于下游網絡來說,要將網絡結構改造成與GPT一樣的網絡結構
  • 做下游任務時,利用第一步預訓練好的參數去初始化下游任務網絡(與GPT結構一樣)的網絡結構,這樣一來,預訓練學到的語言學知識就被引入到當前任務中了
  • 用當前任務再去訓練這個網絡,對參數進行Fine-tuning,使這個網絡更適合解決當前問題

那么到底什么是Fine-tuning呢?

Fine-tuning

其實上面解決下游任務的過程已經對Fine-tuning簡單地描述了一遍

Fine-tuning其實就是在已經訓練好的模型的基礎上,針對特定任務,再對模型的部分/全部參數進行訓練,以使模型更適應當前任務(很像遷移學習)

優點
  • 解決小規模數據集的訓練問題
  • 節省訓練時間和成本
  • 提升模型在目標任務上的性能

BERT模型

參考

  • 視頻:
  • 博客:
    • BERT模型
    • BERT詳解:概念、原理與應用
    • 一文讀懂BERT

定義

BERT模型(Bidirectional Encoder Representations from Transformers)是一種基于 Transformer 架構的預訓練語言模型

它的特殊之處并不是說它有什么很突出的創新點,而是集大成者

所謂集大成者:

  • 借鑒了ELMo模型雙向雙層LSTM同時使用上文下文預測的思路
  • GPT類似,使用Transformer作為特征提取器
  • 采用了Word2VecCBOW模型

結構 & 對比

  • ELMo使用從左向右和從右向左的兩個LSTM網絡,分別以 P(wi∣w1,?,wi?1)和?P(wi∣wi+1,?,wn)P(w_i|w_1,\cdots,w_{i-1})\ 和\ P(w_i|w_{i+1},\cdots,w_{n})P(wi?w1?,?,wi?1?)??P(wi?wi+1?,?,wn?)作為目標函數獨立訓練,將訓練得到的特征向量用拼接實現雙向編碼,其實本質上還是相當于單向編碼
  • GPT使用Transformer Decoder作為Transformer Block,以P(wi∣w1,?,wi?1)P(w_i|w_1,\cdots,w_{i-1})P(wi?w1?,?,wi?1?)為目標函數,使用Transformer Block代替LSTM進行特征提取,實現了單向編碼,是一個標準的預訓練語言模型
  • BERT也是一個標準的預訓練語言模型,以P(wi∣w1,?,wn)P(w_i|w_1,\cdots,w_n)P(wi?w1?,?,wn?)作為目標函數進行訓練;使用Transformer Encoder作為Transformer Block,將GPT的單向編碼改為雙向編碼;也就是說,BERT舍棄了文本生成能力,換來了更強的語義理解能力

BERT的模型其實就是Transformer Encoder的堆疊,在模型參數上,官方一開始提供了兩個版本:

BERTBASE:L=12,H=768,A=12BERTLARGE:L=24,H=1024,A=16L:TransformerBlock的層數H:特征向量的維度A:多頭自注意力機制的頭數\begin{align} BERT_{BASE}:L=12,H=768,A=12\\ BERT_{LARGE}:L=24,H=1024,A=16\\ L:Transformer\ Block的層數\\ H:特征向量的維度\\ A:多頭自注意力機制的頭數\\ \end{align} BERTBASE?:L=12,H=768,A=12BERTLARGE?:L=24,H=1024,A=16L:Transformer?Block的層數H:特征向量的維度A:多頭自注意力機制的頭數??

無監督訓練

方法

BERT也采用二階段預訓練方法:

  • 第一階段:使用易獲取的大規模無標簽語料,訓練基礎語言模型
  • 第二階段:使用指定任務的少量帶標簽數據進行Fine-tuning
任務
  • 使用語言掩碼模型(MLM)方法訓練詞的語義理解能力
  • 用下句預測(NSP)方法訓練句子之間的理解能力,從而更好支持下游任務

語言掩碼模型MLM

由來

BERT作者認為自左向右和自右向左的單向編碼器拼成的雙向編碼器,在性能,參數規模,效率等方面都不如深度雙向編碼器

這就是為什么BERT使用Transformer Encoder作為特征提取器,而不是使用從左至右編碼和從右至左編碼的兩個Transformer Decoder

由于無法使用標準語言模型的訓練模式(?),BERT使用MLM進行訓練模型,MLM借鑒了完形填空CBOW的思想

回答:傳統的語言模型(基于循環神經網絡構建的語言模型)都是單向的,比如ELMo(兩個單向拼接成一個雙向);而BERT是雙向語言模型,所以需要使用全新的訓練方式

  • AR模型(自回歸模型)
    • 根據上文預測下一個單詞,或根據下文預測前一個單詞,只能考慮單側信息
  • AE模型(自編碼模型)
    • 從損壞的輸入數據中預測重構原始數據,可以使用上下文信息,BERT采用的就是AE模型
做法

在原始句子中,隨機抽取15%的token進行掩蓋,用其上下文去判斷[mask]位置被掩蓋的token原本應該是什么

由于BERT使用AE模型,MLM的做法會有個問題,15%的掩蓋率其實很高了,會導致掩碼詞在下游任務Fine-tuning階段從未被見過,導致了預訓練和Fine-tuning的不一致

簡單理解就是:在預訓練學習階段,模型已經習慣了[mask],那么MLM學到的一些表達就可能依賴于[mask];但是在下游任務中[mask]可能從未出現,這就導致了一些表達無法很好的遷移

為了解決這個問題,對于被選取的作為掩碼詞的15%的token,不是全用[mask]代替,而是采取以下做法來解決上述弊端:

  • 對于80%的訓練樣本:
    • 將選取的token直接替換成[mask]
	用[]表示選取中的token比如:我好餓啊,我想吃[飯]↓我好餓啊,我想吃[mask]
  • 對于10%的訓練樣本:
    • 選中的詞原封不動,為了緩解訓練文本和預測文本的偏差帶來的性能損失
  • 對于最后10%的訓練樣本:
    • 將選中的詞隨機替換成一個新詞,這樣是為了讓BERT學會根據上下文糾錯
	用[]表示選取中的token比如:我好餓啊,我想吃[飯]↓我好餓啊,我想吃電腦

這樣的好處是:編碼器不知道哪些詞是需要預測的,哪些詞是錯誤的,因此被迫學習每一個token的表示向量

下句預測NSP

在很多自然語言處理的下游任務(如問答,自然語言推斷)中,都基于兩個句子做邏輯推理,但模型本身并不具備直接捕獲句
子之間語義聯系的能力,或者說,單詞預測的訓練(比如GPT,ELMo,都是基于上下文對單詞預測)達不到句子關系這個層級

為了學會捕捉句子之間的語義聯系,BERT 采用了下句預測(NSP)作為無監督預訓練的一部分。

NSP的具體做法是:BERT的輸入由兩個句子(A,B)組成,其中:

  • 50%的概率為這兩個句子是連續的,即B是真實文本中A的下一句話
  • 另外50%的概率為這兩個句子是隨機抽取的

句子的形式:

[CLS] A [SEP] B [SEP]
[SEP]標簽表示分隔符
[CLS]標簽用于類別預測,結果為1時,表示輸入連續句對(isNext),為0時表示隨機句對(notNext)

通過訓練[CLS]編碼后的輸出標簽,BERT可以學會捕捉兩個輸入句對的文本語義

eg:

Input: [CLS]The man went to [MASK] [SEP] He bought a bottle of Coke[SEP]
Label: isNextInput: [CLS]The man [MASK] to store[SEP] I'm going to sleep[SEP]
Label: notNext
輸入表示

BERT的預訓練方法有以上兩種,但是實際使用中通常是兩種方法混合使用

由于BERT模型通過Transformer Encoder堆疊組成,因此BERT的輸入需要兩套embedding操作:

  • Token Embeddings
    • 將各個詞轉換為固定維度的向量表示;
      • 在BERT中,每個單詞會先進行Tokenization后再輸入Token Embeddings層中
      • 插入兩個特殊的Token,在Tokenization的結果開頭加上[CLS],結尾加上[SEP]
      • 最終轉換為768維的向量
  • Position Embeddings
    • 不同于Transformer中用三角函數固定表示每個位置的位置編碼,BERT中的位置編碼是預訓練過程中通過學習得來的,訓練思想類似于Word2Vec中嵌入矩陣Q
  • Segment Embeddings
    • 用于區分一個單詞屬于句子對中的哪個句子
      • 賦0:第一個句子中的各個Token
      • 賦1:第二個句子中的各個Token

這3個向量都是768維的,最后將其按元素相加,得到最終的Input Embedding

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

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

相關文章

開源 Arkts 鴻蒙應用 開發(十六)自定義繪圖控件--波形圖

文章的目的為了記錄使用Arkts 進行Harmony app 開發學習的經歷。本職為嵌入式軟件開發,公司安排開發app,臨時學習,完成app的開發。開發流程和要點有些記憶模糊,趕緊記錄,防止忘記。 相關鏈接: 開源 Arkts …

【linux】自定義shell——bash命令行解釋器小程序

小編個人主頁詳情<—請點擊 小編個人gitee代碼倉庫<—請點擊 linux系列專欄<—請點擊 倘若命中無此運&#xff0c;孤身亦可登昆侖&#xff0c;送給屏幕面前的讀者朋友們和小編自己! 目錄前言一、交互問題&#xff0c;獲取命令行二、字串的分隔問題&#xff0c;解析命…

【Python】Python爬蟲學習路線

文章目錄Python爬蟲學習路線&#xff1a;從入門到實戰的全景指南一、地基&#xff1a;Python核心基礎1. 基礎語法與數據結構2. 面向對象編程&#xff08;OOP&#xff09;3. 正則表達式&#xff08;Regex&#xff09;4. 模塊與包管理二、工具鏈&#xff1a;Python爬蟲核心庫1. 網…

VUE+SPRINGBOOT從0-1打造前后端-前后臺系統-用戶管理

在現代Web應用開發中&#xff0c;前后端分離架構已經成為主流模式。本文將通過一個完整的用戶管理系統案例&#xff0c;詳細介紹如何使用Vue.js Element UI構建前端界面&#xff0c;結合Spring Boot實現后端服務&#xff0c;實現前后端分離開發。該系統包含用戶信息的增刪改查…

基于uni-app+vue3實現的微信小程序地圖范圍限制與單點標記功能實現指南

一、功能概述本文將分步驟講解如何使用uni-app框架在微信小程序中實現以下功能&#xff1a;顯示基礎地圖繪制特定區域范圍&#xff08;以鄭州市為例&#xff09;實現點擊地圖添加標記點限制標記點只能在指定區域內添加顯示選中位置的坐標信息二、分步驟實現步驟1&#xff1a;搭…

C# 反射和特性(關于應用特性的更多內容)

關于應用特性的更多內容 至此&#xff0c;我們演示了特性的簡單使用&#xff0c;都是為方法應用單個特性。本節將講述特性的其他使 用方式。 多個特性 可以為單個結構應用多個特性。 多個特性可以使用下面任何一種格式列出。 獨立的特性片段一個接一個。通常&#xff0c;它們彼…

【iOS】KVC原理及自定義

目錄 前言 KVC定義及API KVC的使用 基本類型 集合類型 訪問非對象類型——結構體 集合操作符 層層嵌套 KVC底層原理 設值過程 取值過程 自定義KVC setter方法 getter方法 KVC異常小技巧 自動轉換類型 設置空值 未定義的key 前言 在平時的開發中我們經常用到K…

完整設計 之 智能合約系統:主題約定、代理協議和智能合約 (臨時命名)----PromptPilot (助手)答問之2

摘要&#xff08;CSDN的AI助手生成的&#xff09;智能合約系統架構設計摘要本設計構建了一個多層次智能合約系統&#xff0c;包含150字以內的核心架構&#xff1a;三級架構體系&#xff1a;元級&#xff08;序分&#xff09;&#xff1a;MetaModel合約定義系統核心原則模型級&a…

Java基礎 8.16

1.final關鍵字基本介紹final中文意思&#xff1a;最后的&#xff0c;最終的final可以修飾類、屬性、方法和局部變量在某些情況下&#xff0c;程序員可能有以下需求&#xff0c;就會使用到final當不希望類被繼承時,可以用final修飾當不希望父類的某個方法被子類覆蓋/重寫(overri…

YOLOv8目標檢測網絡結構理論

目錄 YOLOv8的網絡結構圖&#xff1a; Backbone 卷積塊&#xff08;Conv Block&#xff09; Conv2d層 BatchNorm2d層 SiLU激活函數 瓶頸塊(Bottleneck Block) C2f 模塊結構 Neck SPPF(空間金字塔池化快速) PAN - FPN Head 結構1.卷積層和激活函數: 2.預測層(Predi…

docker部署hadoop集群

Docker部署hadoop集群下載資源構建鏡像啟動容器搭建集群配置ssh免密節點職責安排修改配置文件啟動集群測試上傳下載執行wordcount程序補充配置歷史服務器日志聚集單節點啟動Java客戶端使用HDFSMapReduce下載資源 java華為鏡像下載地址&#xff1a;Index of java-local/jdk (hu…

常用的T-SQL命令

文章目錄1. 數據庫操作2. 表操作3. 數據插入、更新、刪除4. 數據查詢5. 存儲過程6. 事務處理7、如何使用T-SQL在表中設置主鍵和外鍵&#xff1f;1. 設置主鍵&#xff08;PRIMARY KEY&#xff09;方法1&#xff1a;創建表時定義主鍵方法2&#xff1a;通過ALTER TABLE添加主鍵2. …

C++面試題及詳細答案100道( 31-40 )

《前后端面試題》專欄集合了前后端各個知識模塊的面試題&#xff0c;包括html&#xff0c;javascript&#xff0c;css&#xff0c;vue&#xff0c;react&#xff0c;java&#xff0c;Openlayers&#xff0c;leaflet&#xff0c;cesium&#xff0c;mapboxGL&#xff0c;threejs&…

給純小白的 Python 操作 Excel 筆記

&#x1f9f0; 1. 先裝工具電腦鍵盤按 Win R&#xff0c;輸入 cmd&#xff0c;回車&#xff0c;把下面一行粘進去回車&#xff0c;等它跑完。 bashpip install openpyxl——————————————————&#x1f6e0;? 2. 打開一個空白的 Excel 打開 Jupyter Notebook…

HTML 常用屬性介紹

目錄 HTML 屬性 HTML 屬性速查表 一、通用屬性&#xff08;所有元素適用&#xff09; 二、鏈接與引用相關屬性 三、表單與輸入控件屬性 四、媒體與多媒體屬性 五、事件屬性&#xff08;常用 JavaScript 事件&#xff09; 六、其他常用屬性 核心通用屬性 id 屬性 cla…

HTML5練習代碼集:學習與實踐核心特性

本文還有配套的精品資源&#xff0c;點擊獲取 簡介&#xff1a;HTML5作為新一代網頁標準&#xff0c;對Web開發提供了更豐富的功能和工具。本練習代碼集專門針對HTML5的核心特性&#xff0c;包括語義化標簽、離線存儲、多媒體支持、圖形繪制等&#xff0c;以及CSS3的3D效果和…

【RH134知識點問答題】第 10 章:控制啟動過程

目錄 1. 請簡要說明 RHEL9 的啟動過程。 2. 系統重啟和關機的命令分別是什么? 3. Systemd target 是什么&#xff1f; 4. 重置丟失的 root 密碼需要哪些步驟&#xff1f; 5. 如何讓系統日志在重啟后持久保留 1. 請簡要說明 RHEL9 的啟動過程。 答&#xff1a;①開機自檢…

Apollo10.0學習之固態雷達與IMU的外參標定

固態雷達&#xff08;如Livox、禾賽等非旋轉式激光雷達&#xff09;與IMU&#xff08;慣性測量單元&#xff09;的外參標定&#xff08;Extrinsic Calibration&#xff09;是自動駕駛、機器人定位&#xff08;如LIO-SAM、FAST-LIO&#xff09;的關鍵步驟。1. 標定原理 外參標定…

HTML5實現古典音樂網站源碼模板1

文章目錄 1.設計來源1.1 網站首頁1.2 古典音樂界面1.3 著名人物界面1.4 古典樂器界面1.5 歷史起源界面 2.效果和源碼2.1 動態效果2.2 源代碼 源碼下載萬套模板&#xff0c;程序開發&#xff0c;在線開發&#xff0c;在線溝通 作者&#xff1a;xcLeigh 文章地址&#xff1a;http…

40 C++ STL模板庫9-容器2-vector

C STL模板庫9-容器2-vector 文章目錄C STL模板庫9-容器2-vector一、基礎概念1. 類型成員&#xff08;Type Members&#xff09;2. 模板參數二、構造函數1. 語法2. 示例三、元素訪問1. 函數說明2. 示例代碼四、容量操作1. 函數說明2. 關鍵點說明3. 關鍵操作解析4. 操作示例五、修…