【深度學習】1. 感知器,MLP, 梯度下降,激活函數,反向傳播,鏈式法則

一、感知機

對于分類問題,我們設定一個映射,將x通過函數f(x)映射到y

1. 感知機的基本結構

感知機(Perceptron)是最早期的神經網絡模型,由 Rosenblatt 在 1958 年提出,是現代神經網絡和深度學習模型的雛形。

Deep Learning Methods - Introduction to Machine Learning

其模擬的是人腦內的神經元。神經元會接受到一些信號(我們給到模型的輸入),之后神經元會決定是否激活這個信號,如果需要激活,就會產生一些神經沖動(Nerve Impulses),將信息傳播到下一個鏈接。從而完成了信息端到端的傳遞。

Deep Learning 101: Lesson 7: Perceptron | by Muneeb S. Ahmad | Medium

在深度學習中,其定義如下

基本結構如下:

  • 輸入向量 x = [ x 1 , x 2 , . . . , x d ] \mathbf{x} = [x_1, x_2, ..., x_d] x=[x1?,x2?,...,xd?]
  • 權重向量 w = [ w 1 , w 2 , . . . , w d ] \mathbf{w} = [w_1, w_2, ..., w_d] w=[w1?,w2?,...,wd?]
  • 偏置項 b b b
  • 輸出函數: o = sign ( w ? x + b ) o = \text{sign}(\mathbf{w}^\top \mathbf{x} + b) o=sign(w?x+b)

sign ( s ) = { + 1 , s ≥ 0 ? 1 , s < 0 \text{sign}(s) = \begin{cases} +1, & s \geq 0 \\\\ -1, & s < 0 \end{cases} sign(s)=? ? ??+1,?1,?s0s<0?

這是一個線性分類器,決策邊界是一個超平面。

2. 感知機的數學定義與決策規則

感知機的核心是對輸入的加權求和,并加上一個偏置項 b b b,用于輸出一個實值:

y ^ = ∑ i = 1 d w i x i + b = w ? x + b \hat{y} = \sum_{i=1}^{d} w_i x_i + b = \mathbf{w}^\top \mathbf{x} + b y^?=i=1d?wi?xi?+b=w?x+b

其中:

  • y ^ \hat{y} y^?:神經元對期望輸出的估計(輸出值)
  • w \mathbf{w} w:權重向量(weight vector)
  • x \mathbf{x} x:輸入向量(input vector)
  • b b b:偏置項(bias)
決策規則(Decision Rule)

感知機的最終分類結果是通過符號函數決定的:

o = sign ( y ^ ) = { + 1 , y ^ ≥ 0 ? 1 , y ^ < 0 o = \text{sign}(\hat{y}) = \begin{cases} +1, & \hat{y} \geq 0 \\\\ -1, & \hat{y} < 0 \end{cases} o=sign(y^?)=? ? ??+1,?1,?y^?0y^?<0?

這個函數將連續輸出 y ^ \hat{y} y^? 映射到離散類別 { + 1 , ? 1 } \{+1, -1\} {+1,?1}

分類條件判斷

感知機判斷一個樣本是否被正確分類,依據如下公式:

  • 如果樣本分類正確,則:

y ( w ? x + b ) ≥ 0 y(\mathbf{w}^\top \mathbf{x} + b) \geq 0 y(w?x+b)0

  • 否則(分類錯誤):

y ( w ? x + b ) < 0 y(\mathbf{w}^\top \mathbf{x} + b) < 0 y(w?x+b)<0

這里的 y y y 是樣本的真實標簽(取值為 +1 或 -1)。這個不等式體現了分類面的位置是否與樣本標簽方向一致。

對于一個訓練樣本 ( x i , y i ) (\mathbf{x}_i, y_i) (xi?,yi?)

  • 如果分類正確: y i ( w ? x i + b ) ≥ 0 y_i(\mathbf{w}^\top \mathbf{x}_i + b) \geq 0 yi?(w?xi?+b)0
  • 否則分類錯誤。

直觀理解:

y 表示 ground truth 真實標簽

( w ? x i + b ) (\mathbf{w}^\top \mathbf{x}_i + b) (w?xi?+b) 表示 y ^ \hat{y} y^? 即模型預測標簽

而sign函數,把預測值分為了兩個:+1,-1

因此預測正確的情況有兩種:(+1, +1) 或者 (-1, -1) 這兩種情況二者的乘積都是 >0

預測錯誤的情況: (+1, -1) 或者 (-1, +1) 這兩種情況的乘積 < 0

感知機的損失函數僅考慮錯誤分類的樣本:

m i n L ( w , b ) = ? ∑ i ∈ M y i ( w ? x i + b ) min L(\mathbf{w}, b) = -\sum_{i \in \mathcal{M}} y_i (\mathbf{w}^\top \mathbf{x}_i + b) minL(w,b)=?iM?yi?(w?xi?+b)

其中 M \mathcal{M} M 是錯誤分類樣本的集合。

為什么有個負號? 按照原始的公式定義, ∑ i ∈ M y i ( w ? x i + b ) \sum_{i \in \mathcal{M}} y_i (\mathbf{w}^\top \mathbf{x}_i + b) iM?yi?(w?xi?+b) 的最大值才是我們的優化目標。

此時的乘積是一種分類邊界距離的粗略估計,但并不適用于衡量回歸或概率分布的“誤差大小”。 (因此不能用誤差大小的思路來想。)

說回負號,在機器學習中,我們習慣用**最小化(minimization)**問題來構造損失函數,也方便求導。

優化器SGD、Adam等是梯度下降,適配最小化的loss函數

3. 優化算法:梯度下降

通過求偏導得到:

  • 權重更新: ? w L = ? ∑ i ∈ M y i x i \nabla_\mathbf{w} L = - \sum_{i \in \mathcal{M}} y_i \mathbf{x}_i ?w?L=?iM?yi?xi?
  • 偏置更新: ? b L = ? ∑ i ∈ M y i \nabla_b L = - \sum_{i \in \mathcal{M}} y_i ?b?L=?iM?yi?

偏導后得到的是梯度,同時包含“變化的方向”與“變化的速率”

每次迭代更新:

w ← w + η y i x i , b ← b + η y i \mathbf{w} \leftarrow \mathbf{w} + \eta y_i \mathbf{x}_i, \quad b \leftarrow b + \eta y_i ww+ηyi?xi?,bb+ηyi?

具體而言 ? w L = ? ∑ i ∈ M y i x i \nabla_\mathbf{w} L = - \sum_{i \in \mathcal{M}} y_i \mathbf{x}_i ?w?L=?iM?yi?xi? 告訴我們:朝著這個方向,損失上升最快

所以我們應該:

w ← w ? η ? w L \mathbf{w} \leftarrow \mathbf{w} - \eta \nabla_\mathbf{w}L ww?η?w?L

來減小損失

4. 激活函數:Sign 函數

g ( x ) = sign ( w ? x + b ) g(\mathbf{x}) = \text{sign}(\mathbf{w}^\top \mathbf{x} + b) g(x)=sign(w?x+b)

定義如下:

sign ( s ) = { + 1 , s ≥ 0 ? 1 , s < 0 \text{sign}(s) = \begin{cases} +1, & s \geq 0 \\\\ -1, & s < 0 \end{cases} sign(s)=? ? ??+1,?1,?s0s<0?

5. 感知機的局限性

  • 感知機無法處理非線性可分問題。
  • 經典反例:XOR 任務。

在這里插入圖片描述

x1x2y (XOR)
000
011
101
110

線性模型無法分割這兩類。

6. AI 寒冬與轉折點

  • Minsky 與 Papert 在《Perceptrons》中指出感知機的局限,引發“AI寒冬”。

二、多層感知機(MLP)與非線性建模

1. 多層網絡結構

1986年,Hinton 等人提出反向傳播算法(Backpropagation)

  • 支持隱藏層訓練
  • 支持非線性組合

組成: 輸入層 → 隱藏層 → 輸出層

Unsupervised Feature Learning and Deep Learning Tutorial

2. 網絡表示為函數復合

y = f ( L ) ( … f ( 2 ) ( f ( 1 ) ( x ) ) ) y = f^{(L)}(\dots f^{(2)}(f^{(1)}(x))) y=f(L)(f(2)(f(1)(x)))

對應結構是一個有向無環圖(DAG),每層將上一層的輸出作為輸入。

3. 非線性激活函數

激活函數必須非線性,否則多層仍等效于單層。

常見激活函數:

  • Sigmoid: f ( s ) = 1 1 + e ? s f(s) = \frac{1}{1 + e^{-s}} f(s)=1+e?s1?

  • Tanh: f ( s ) = e s ? e ? s e s + e ? s f(s) = \frac{e^s - e^{-s}}{e^s + e^{-s}} f(s)=es+e?ses?e?s?

  • ReLU: f ( s ) = max ? ( 0 , s ) f(s) = \max(0, s) f(s)=max(0,s)

  • Leaky ReLU:
    f ( s ) = { s , s ≥ 0 α s , s < 0 f(s) = \begin{cases} s, & s \geq 0 \\\\ \alpha s, & s < 0 \end{cases} f(s)=? ? ??s,αs,?s0s<0?

  • GELU: 使用高斯誤差函數的平滑激活

4. 通用逼近定理(Universal Approximation Theorem)

通用逼近定理是神經網絡理論的核心之一。它說明:

只要一個前饋神經網絡具有單隱藏層,且隱藏單元數量足夠多,它就能以任意精度逼近任何連續函數。

數學表述

設激活函數 f ( ? ) f(\cdot) f(?) 是一個非常數、有界、單調遞增的連續函數

定義 I m = [ 0 , 1 ] m I_m = [0,1]^m Im?=[0,1]m 表示 m m m 維單位超立方體, C ( I m ) C(I_m) C(Im?) 表示定義在 I m I_m Im? 上的所有連續函數的集合。

則對于任意 ε > 0 \varepsilon > 0 ε>0 和任意函數 F ∈ C ( I m ) F \in C(I_m) FC(Im?),總存在整數 N N N、實數 v i , b i ∈ R v_i, b_i \in \mathbb{R} vi?,bi?R 和向量 w i ∈ R m \mathbf{w}_i \in \mathbb{R}^m wi?Rm,使得:

F ^ ( x ) = ∑ i = 1 N v i f ( w i ? x + b i ) \hat{F}(x) = \sum_{i=1}^{N} v_i f(\mathbf{w}_i^\top \mathbf{x} + b_i) F^(x)=i=1N?vi?f(wi??x+bi?)

滿足:

∣ F ^ ( x ) ? F ( x ) ∣ < ε , ? x ∈ I m \left| \hat{F}(x) - F(x) \right| < \varepsilon, \quad \forall x \in I_m ?F^(x)?F(x) ?<ε,?xIm?

即函數 F ^ ( x ) \hat{F}(x) F^(x) 可以任意逼近 F ( x ) F(x) F(x)

直觀解釋
  • 神經網絡可以通過一個隱藏層 + 足夠多的神經元來逼近任何連續函數
  • 每個隱藏神經元做一個線性變換 + 激活函數(如 Sigmoid 或 Tanh)
  • 輸出層再對它們加權求和,實現對復雜函數的擬合
實際意義
項目說明
所需層數僅需單隱藏層(前饋)
所需神經元足夠多即可,不一定很深
所逼近的函數任何連續函數(理論上)
激活函數要求非常數、有界、單調遞增、連續
引用

Universality Theorem (Hecht-Nielsen, 1989):
“Neural networks with a single hidden layer can be used to approximate any continuous function to any desired precision.”

5. 可視化解釋(單輸入 → 單輸出)

  • 增加權重 → 激活函數更陡峭
  • 改變偏置 → 平移激活區域(會移動圖形,但不會改變圖形的形狀。)
  • 組合多個隱藏神經元 → 構造階躍、凸包、塔型結構等更復雜函數

在二維輸入時,通過構建多個線性超平面與組合,網絡可以學習更復雜的輸入空間劃分。

Neural Networks, the Universal Approximation Theorem and Option Valuation |  by Abhisek | Analytics Vidhya | Medium

6. 激活函數的作用與常見形式

激活函數是神經元中引入非線性的關鍵部分,它決定了每個神經元的響應形式。

必須是非線性的:否則就等同于線性分類器

幾乎處處連續且可微單調性:否則會在誤差面引入額外的局部極值

在這里插入圖片描述

比如 sin 函數就不可以作為激活函數,因為有多個局部極值,不符合單調性。

激活函數的基本結構

一個神經元的輸出形式如下:

a = f ( w ? x + b ) a = f(w^\top x + b) a=f(w?x+b)

其中:

  • f f f 是激活函數
  • w ? x + b w^\top x + b w?x+b 是線性部分,決定輸入的加權求和和偏移

激活函數 f ( ? ) f(\cdot) f(?) 的引入,使得神經網絡具備學習非線性關系的能力。

常見激活函數
1. Sigmoid(S型函數)

f ( x ) = 1 1 + e ? x f(x) = \frac{1}{1 + e^{-x}} f(x)=1+e?x1?

  • 輸出范圍: ( 0 , 1 ) (0, 1) (0,1)

  • 常用于早期網絡、概率建模

  • 缺點:梯度容易消失、飽和區間較大

    Sigmoid Activation Function: An Introduction | Built In

2. Tanh(雙曲正切)

f ( x ) = e x ? e ? x e x + e ? x = 2 ? sigmoid ( 2 x ) ? 1 f(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} = 2 \cdot \text{sigmoid}(2x) - 1 f(x)=ex+e?xex?e?x?=2?sigmoid(2x)?1

  • 輸出范圍: ( ? 1 , 1 ) (-1, 1) (?1,1)
  • 中心化特性優于 sigmoid,訓練更穩定

Tanh Activation Explained | Papers With Code

3. ReLU(Rectified Linear Unit)

f ( x ) = max ? ( 0 , x ) f(x) = \max(0, x) f(x)=max(0,x)

  • 當前主流激活函數
  • 計算簡單,不飽和區域梯度穩定
  • 缺點:負區間完全為零(神經元死亡)
    在這里插入圖片描述
4. Leaky ReLU

f ( x ) = { x , x ≥ 0 α x , x < 0 f(x) = \begin{cases} x, & x \geq 0 \\ \alpha x, & x < 0 \end{cases} f(x)={x,αx,?x0x<0?

  • 彌補 ReLU 在負區間完全為 0 的問題

  • α \alpha α 是一個很小的正數(如 0.01)

    Leaky ReLU Explained | Papers With Code

5. GELU(Gaussian Error Linear Unit)

f ( x ) = x ? Φ ( x ) f(x) = x \cdot \Phi(x) f(x)=x?Φ(x)

其中 Φ ( x ) \Phi(x) Φ(x) 是標準正態分布的累積分布函數。

  • 更平滑的 ReLU 變體
  • 被用于 BERT、GPT 等大模型中

在這里插入圖片描述

激活函數的可視化與作用
  • 權重 w w w 控制曲線的陡峭程度(斜率)
  • 偏置 b b b 控制曲線在輸入空間的位置(左右平移)
  • 激活函數本身決定了形狀(階躍、平滑、非線性)

舉例說明:

  • f ( w x + b ) f(wx + b) f(wx+b) 中改變 w w w 會使 Sigmoid 更陡或更平緩
  • 改變 b b b 會讓激活區間左移或右移

但注意:

偏置 b b b 不會改變激活函數的形狀,只是移動它的激活位置。

而組合多個神經元后,整個網絡的輸出函數形狀就可以被靈活控制,例如拼接成階梯函數、塔函數等復雜結構。

7. 反向傳播與激活函數的梯度問題

在神經網絡訓練中,我們通過最小化損失函數來更新權重和偏置,這一過程依賴于反向傳播算法(Backpropagation)。

反向傳播的核心思想是利用鏈式法則計算每一層參數對損失函數的梯度。

鏈式法則回顧

對于復合函數:
L = f ( g ( x ) ) ? d L d x = f ′ ( g ( x ) ) ? g ′ ( x ) L = f(g(x)) \Rightarrow \frac{dL}{dx} = f'(g(x)) \cdot g'(x) L=f(g(x))?dxdL?=f(g(x))?g(x)

在神經網絡中每一層都相當于一次嵌套函數變換,因而可以通過鏈式法則將梯度從輸出層反傳至輸入層。

激活函數對梯度的影響

梯度的傳播會經過每一層的激活函數:

  • 若激活函數的導數為零或極小(如 sigmoid 飽和區),則梯度容易消失
  • 若激活函數導數過大或不連續,可能造成不穩定訓練(如 ReLU 的斷點)
各類激活函數的導數
  • Sigmoid:
    f ′ ( x ) = f ( x ) ( 1 ? f ( x ) ) f'(x) = f(x)(1 - f(x)) f(x)=f(x)(1?f(x))
    → 導數最大為 0.25,容易出現梯度消失

  • Tanh:
    f ′ ( x ) = 1 ? f ( x ) 2 f'(x) = 1 - f(x)^2 f(x)=1?f(x)2
    → 比 sigmoid 好,但也有飽和區

  • ReLU:
    f ′ ( x ) = { 1 , x > 0 0 , x ≤ 0 f'(x) = \begin{cases} 1, & x > 0 \\ 0, & x \leq 0 \end{cases} f(x)={1,0,?x>0x0?
    → 在正區間梯度為 1,負區間為 0(死亡神經元)

  • Leaky ReLU:
    f ′ ( x ) = { 1 , x > 0 α , x < 0 f'(x) = \begin{cases} 1, & x > 0 \\ \alpha, & x < 0 \end{cases} f(x)={1,α,?x>0x<0?
    → 解決了 ReLU 在負區間的“零梯度”問題

  • GELU:
    f ′ ( x ) ≈ Φ ( x ) + x ? ? ( x ) f'(x) \approx \Phi(x) + x \cdot \phi(x) f(x)Φ(x)+x??(x)
    其中 ? ( x ) \phi(x) ?(x) 是標準正態分布密度函數

    → 與ReLU相比平滑,使其能夠更好地保留小梯度信息,增強模型的表達能力。

    GELU通常比ReLU和Leaky實現更好的收斂性.

激活函數選擇對訓練的影響
激活函數優點缺點
Sigmoid平滑、輸出為概率梯度消失嚴重
Tanh零中心、平滑飽和區影響訓練
ReLU快速收斂、稀疏激活死亡神經元問題
Leaky ReLU緩解死神經元引入超參 α \alpha α
GELU平滑 & 有理論支持計算復雜

因此,在實際模型設計中,需要根據任務和模型深度選擇合適的激活函數,以保證訓練穩定和效率。

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

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

相關文章

IP、子網掩碼、默認網關、DNS

IP、子網掩碼、默認網關、DNS 1. 概述1.1 windows配置處 2.IP 地址&#xff08;Internet Protocol Address&#xff09;2.1 公網ip2.2 內網ip2.3 &#x1f310; 公網 IP 與內網 IP 的關系&#xff08;NAT&#xff09; 3. 子網掩碼&#xff08;Subnet Mask&#xff09;4. 默認網…

Azure 公有云基礎架構與核心服務:從基礎到實踐指南

&#x1f525;「炎碼工坊」技術彈藥已裝填&#xff01; 點擊關注 → 解鎖工業級干貨【工具實測|項目避坑|源碼燃燒指南】 一、基礎概念 Azure 的基礎架構由多個核心組件構成&#xff0c;理解這些概念是掌握其技術框架的第一步&#xff1a; 地理區域&#xff08;Geographic R…

Ajax01-基礎

一、AJAX 1.AJAX概念 使瀏覽器的XMLHttpRequest對象與服務器通信 瀏覽器網頁中&#xff0c;使用 AJAX技術&#xff08;XHR對象&#xff09;發起獲取省份列表數據的請求&#xff0c;服務器代碼響應準備好的省份列表數據給前端&#xff0c;前端拿到數據數組以后&#xff0c;展…

使用防火墻禁止程序聯網(這里禁止vscode)

everything搜一下Code.exe的安裝路徑&#xff1a;D:\downloadApp1\vscode\Microsoft VS Code\Code.exe 方法&#xff1a;使用系統防火墻&#xff08;推薦&#xff09; Windows 通過防火墻阻止 VS Code&#xff1a; 打開 Windows Defender 防火墻&#xff08;控制面板 > 系統…

微信小程序 隱私協議彈窗授權

開發微信小程序的第一步往往是隱私協議授權&#xff0c;尤其是在涉及用戶隱私數據時&#xff0c;必須確保用戶明確知曉并同意相關隱私政策。我們才可以開發后續的小程序內容。友友們在按照文檔開發時可能會遇到一些問題&#xff0c;我把所有的授權方法和可能遇到的問題都整理出…

JVM規范之棧幀

JVM規范之棧幀 前言正文概述局部變量表操作數棧動態鏈接 總結參考鏈接 前言 上一篇文章了解了JVM規范中的運行時數據區&#xff1a; JVM規范之運行時數據區域 其中&#xff0c;棧是JVM線程私有的內存區&#xff0c;棧中存儲的單位是幀&#xff08;frames&#xff09;&#xff…

SGMD辛幾何模態分解

SGMD辛幾何模態分解 運行包含頻譜圖相關系數圖 Matlab語言 算法近幾年剛提出&#xff0c;知網還沒幾個人用&#xff0c;你先用&#xff0c;你就是創新&#xff01; 算法新穎小眾&#xff0c;用的人很少&#xff0c;包含分解圖、頻譜圖、相關系數圖&#xff0c;效果如圖所示&a…

計算機網絡總結(物理層,鏈路層)

目錄 第一章 概述 1.基本概念 2.- C/S模式&#xff0c;B/S模式&#xff0c;P2P模式 3.- LAN,WAN,MAN,PAN的劃分 4.電路交換與分組交換&#xff0c;數據報交換和虛電路交換 第二章 物理層 1.信號編碼&#xff1a;不歸零編碼&#xff0c;曼切斯特編碼 2.幾種復用技術的特…

臺系廠商SSD主控之爭:Phison對決SMI

近日&#xff0c;臺系SSD主控廠商Phison和Silicon Motion之間圍繞主控性能的爭論引發關注&#xff0c;焦點集中在Gen5 SSD的功耗和速度等關鍵指標上。 Phison的E28 Gen5 SSD控制器已推出一段時間&#xff0c;是市場上一些最快存儲設備的“心臟”。其主要競爭對手Silicon Motion…

醫學影像科研概述與研究倫理

關鍵要點 醫學影像科研通過開發和優化影像技術(如X射線、CT、MRI等)推動疾病診斷和治療進步。研究需遵循核心倫理原則:受益(為患者和社會帶來益處)、無害(避免傷害)、自主(尊重患者選擇權)和公正(公平對待參與者)。醫學影像科研的特殊倫理問題包括知情同意、隱私保護…

使用 kafka-console-consumer.sh 指定時間或偏移量消費

1、問題來源 在工作中需要觀察上游生產的數據順序和自己寫的任務處理數據的順序是否一致&#xff0c;嘗嘗需要將kafka中的指定時間或者偏移量開始的數據導出來分析&#xff0c;如果每次都導數據都是從頭開消費導全量&#xff0c;往往少則幾個G多則幾十G的數據&#xff0c;導出…

構建Harbor私有鏡像庫

軟硬件環境清單 環境搭建 部署Euler22.0系統&#xff0c;連接xshell&#xff1a; 關閉防火墻和selinux&#xff0c;設置主機名&#xff1a; systemctl stop firewalld systemctl disable firewalld vi /etc/selinux/config hostnamectl set-hostname harbor reboot 修改靜態…

分布式緩存:緩存設計中的 7 大經典問題_緩存失效、緩存穿透、緩存雪崩

文章目錄 緩存全景圖Pre緩存設計中的 7 大經典問題一、緩存失效1. 問題描述2. 原因分析3. 業務場景4. 解決方案 二、緩存穿透1. 問題描述2. 原因分析3. 業務場景4. 解決方案緩存空結果BloomFilter 過濾BloomFilter 原理簡述 三、緩存雪崩1. 問題描述2. 原因分析3. 業務場景4. 解…

Mysql差異備份與恢復

1.練習差異備份 差異備份&#xff1a;備份完全備份后&#xff0c;新產生的數據。 在192.168.88.50主機完成差異備份 步驟一&#xff1a;練習差異備份//周一完全備份 mysql> select * from test.one; --------------------- | name | age | sex | ------------------…

【Fargo】razor框架調用mediasoup的發送和接收能力

功能進行拆分,創建獨立的發送和接收線程,并實現跨線程的數據傳遞。創建一個簡化的主函數,展示如何使用這些新的接口線程隔離是通過包隊列實現的,實際上可以用webrtc的post 跨線程機制? 需求 主要有兩個需求:啟動接收線程接收數據的接口 啟動發送線程,但是數據來自于sim_…

C++——volatile

Cvolatile關鍵字 volatile是C中的一個關鍵字&#xff0c;用于修飾變量&#xff0c;表示該變量的值可能會在程序的控制之外被改變。它主要告訴編譯器不要對這個變量進行優化&#xff0c;確保每次訪問變量時都從實際存儲位置讀取最新值&#xff0c;而不是依賴寄存器中的緩存值。…

搭建自己的語音對話系統:開源 S2S 流水線深度解析與實戰

網羅開發 &#xff08;小紅書、快手、視頻號同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企業從事人工智能項目研發管理工作&#xff0c;平時熱衷于分享各種編程領域的軟硬技能知識以及前沿技術&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…

qt瀏覽文件支持慣性

#include <QApplication> #include <QListWidget> #include <QScroller> #include <QScrollerProperties>int main(int argc, char *argv[]) {QApplication app(argc, argv);// 創建列表控件并添加示例項QListWidget listWidget;for (int i 0; i <…

路徑規劃算法BFS/Astar/HybridAstar簡單實現

借鑒本文所述代碼簡單實現一下BFS&#xff0c;Astar和HybridAstar路徑規劃算法&#xff0c;用于輔助理解算法原理。 代碼在這里&#xff0c;畫圖用到了matplotlibcpp庫&#xff0c;需要先裝一下&#xff0c;然后直接在文件目錄下執行如下代碼即可運行&#xff1a; mkdir build…

get_the_category() 和 get_the_terms() 的區別

get_the_category() 和 get_the_terms() 是WordPress中用于獲取文章分類的兩個函數&#xff0c;但它們之間存在一些關鍵差異&#xff1a; get_the_category() 特定于分類&#xff1a;get_the_category() 函數專門用于獲取文章的分類(category)。它返回一個包含所有分類對象的…