【深度學習基礎】從感知機到多層神經網絡:模型原理、結構與計算過程全解析

【深度學習基礎】從感知機到多層神經網絡:模型原理、結構與計算過程全解析

在這里插入圖片描述


1. 引言

神經網絡的重要性
作為人工智能的核心技術之一,神經網絡通過模擬人腦神經元的工作機制,成為解決復雜模式識別、預測和決策任務的利器。從圖像分類到自然語言生成,其應用幾乎滲透所有AI領域。

發展脈絡

  • 1958年感知機誕生:Frank Rosenblatt提出單層感知機,開創神經網絡先河,但受限于線性可分性。
  • 1980年代多層網絡突破:反向傳播算法與隱藏層的引入,使神經網絡能夠解決非線性問題(如XOR)。
  • 深度學習革命:算力提升與大數據驅動下,深度神經網絡(DNN、CNN、RNN)在21世紀取得顛覆性成果。

本文目標

  • 拆解感知機的數學模型與訓練過程。
  • 揭示多層神經網絡如何通過隱藏層和激活函數突破線性限制。
  • 通過代碼實戰演示兩類模型的應用場景。

2. 感知機模型

2.1 模型結構與數學原理
感知機(Perceptron)是最簡單的人工神經網絡模型,由輸入層和輸出層直接連接構成,無隱藏層。其核心功能是對輸入數據進行二分類(如判斷“是/否”)。

輸入與權重

  • 輸入向量 x = [ x 1 , x 2 , . . . , x n ] x = [x_1, x_2, ..., x_n] x=[x1?,x2?,...,xn?],表示樣本的 n n n 個特征。
  • 權重向量 w = [ w 1 , w 2 , . . . , w n ] w = [w_1, w_2, ..., w_n] w=[w1?,w2?,...,wn?],每個特征對應一個權重,決定特征的重要性。
  • 偏置項 b b b,用于調整分類決策邊界的偏移量。

計算過程

  1. 加權求和:輸入與權重的線性組合加上偏置,得到凈輸入 z z z
    z = ∑ i = 1 n w i x i + b z = \sum_{i=1}^{n} w_i x_i + b z=i=1n?wi?xi?+b
  2. 激活函數:階躍函數(Step Function)將 z z z 轉換為二分類輸出(0或1)。
    y = { 1 if? z ≥ 0 , 0 otherwise . y = \begin{cases} 1 & \text{if } z \geq 0, \\ 0 & \text{otherwise}. \end{cases} y={10?if?z0,otherwise.?

幾何意義

  • 感知機本質是在 n n n 維空間中構造一個超平面 w ? x + b = 0 w \cdot x + b = 0 w?x+b=0,將數據分為兩類。
  • 例如,二維空間中的分類表現為一條直線(如 w 1 x 1 + w 2 x 2 + b = 0 w_1 x_1 + w_2 x_2 + b = 0 w1?x1?+w2?x2?+b=0)。

2.2 激活函數:階躍函數
階躍函數是感知機的核心組件,其特性如下:

  • 非線性特性:雖然函數本身非連續,但賦予了感知機非線性分類能力。
  • 輸出二值化:將連續輸入映射為離散的0或1,適合二分類任務。

局限性

  • 無法輸出概率(如Sigmoid函數)或多分類結果。
  • 梯度為零,導致無法通過梯度下降法直接優化(需依賴誤差修正算法)。

2.3 學習算法:誤差修正
感知機通過迭代調整權重和偏置,逐步減少分類錯誤。

步驟詳解

  1. 初始化參數:權重 w w w 和偏置 b b b 初始化為零或隨機小值。
  2. 遍歷訓練數據:對每個樣本 ( x ( i ) , y true ( i ) ) (x^{(i)}, y_{\text{true}}^{(i)}) (x(i),ytrue(i)?)
    • 計算預測值 y pred ( i ) = Step ( w ? x ( i ) + b ) y_{\text{pred}}^{(i)} = \text{Step}(w \cdot x^{(i)} + b) ypred(i)?=Step(w?x(i)+b)
    • 計算誤差 ? = y true ( i ) ? y pred ( i ) \epsilon = y_{\text{true}}^{(i)} - y_{\text{pred}}^{(i)} ?=ytrue(i)??ypred(i)?
  3. 更新規則:若分類錯誤( ? ≠ 0 \epsilon \neq 0 ?=0),按以下規則調整參數:
    w new = w old + η ? ? ? x ( i ) w_{\text{new}} = w_{\text{old}} + \eta \cdot \epsilon \cdot x^{(i)} wnew?=wold?+η???x(i)
    b new = b old + η ? ? b_{\text{new}} = b_{\text{old}} + \eta \cdot \epsilon bnew?=bold?+η??
    • η \eta η 為學習率(Learning Rate),控制參數更新步長。

收斂性

  • 若訓練數據線性可分,感知機保證在有限步內收斂。
  • 若數據非線性可分,算法將無限震蕩(需引入多層網絡)。

2.4 局限性:線性可分問題
XOR問題的失敗案例

  • XOR(異或)邏輯的真值表如下:

    x 1 x_1 x1? x 2 x_2 x2? y y y
    000
    011
    101
    110
  • 感知機無法找到一條直線將XOR的四類樣本正確分類(需曲線或非線性邊界)。

解決思路

  • 引入隱藏層:通過多層網絡組合多個感知機,實現非線性決策邊界。
  • 更換激活函數:使用Sigmoid、ReLU等連續可導函數,支持梯度傳播。

3. 多層神經網絡

3.1 隱藏層的作用與結構設計
為什么需要隱藏層?
單層感知機僅能解決線性可分問題,而真實世界的數據(如圖像、語音)往往具有復雜的非線性關系。隱藏層的引入通過以下機制突破這一限制:

  1. 特征抽象與組合

    • 每一層隱藏神經元通過權重和激活函數對輸入進行非線性變換,逐步提取高階特征。
    • 例如,在圖像識別中:
      • 第一層可能檢測邊緣和紋理。
      • 后續層組合這些基礎特征,識別更復雜的結構(如眼睛、車輪)。
  2. 非線性映射能力

    • 隱藏層疊加激活函數(如Sigmoid、ReLU),將原始輸入映射到高維空間,使得線性不可分問題在新的空間中可分。
    • 數學表達(以單隱藏層為例):
      輸出 = f 2 ( W 2 ? f 1 ( W 1 ? x + b 1 ) + b 2 ) \text{輸出} = f_2(W_2 \cdot f_1(W_1 \cdot x + b_1) + b_2) 輸出=f2?(W2??f1?(W1??x+b1?)+b2?)
      • f 1 , f 2 f_1, f_2 f1?,f2? 為激活函數, W 1 , W 2 W_1, W_2 W1?,W2? 為權重矩陣, b 1 , b 2 b_1, b_2 b1?,b2? 為偏置。

3.2 全連接層的結構與前向傳播
全連接層(Dense Layer)的定義

  • 每一層的每個神經元均與下一層的所有神經元連接,形成密集的權重矩陣。
  • 參數規模:若輸入層有 n n n 個神經元,隱藏層有 m m m 個神經元,則權重矩陣維度為 m × n m \times n m×n

前向傳播計算流程(以2層網絡為例):

  1. 輸入層 → 隱藏層

    • 輸入數據 x x x(維度 n × 1 n \times 1 n×1)。
    • 權重矩陣 W 1 W_1 W1?(維度 m × n m \times n m×n),偏置 b 1 b_1 b1?(維度 m × 1 m \times 1 m×1)。
    • 計算凈輸入:
      z 1 = W 1 ? x + b 1 z_1 = W_1 \cdot x + b_1 z1?=W1??x+b1?
    • 激活函數處理:
      a 1 = σ ( z 1 ) ( σ 如?ReLU、Sigmoid ) a_1 = \sigma(z_1) \quad (\sigma \text{ 如 ReLU、Sigmoid}) a1?=σ(z1?)(σ??ReLUSigmoid)
  2. 隱藏層 → 輸出層

    • 權重矩陣 W 2 W_2 W2?(維度 k × m k \times m k×m),偏置 b 2 b_2 b2?(維度 k × 1 k \times 1 k×1)。
    • 計算凈輸入:
      z 2 = W 2 ? a 1 + b 2 z_2 = W_2 \cdot a_1 + b_2 z2?=W2??a1?+b2?
    • 輸出層激活函數(根據任務選擇):
      y pred = Softmax ( z 2 ) ( 多分類 ) 或 Sigmoid ( z 2 ) ( 二分類 ) y_{\text{pred}} = \text{Softmax}(z_2) \quad (\text{多分類}) \quad \text{或} \quad \text{Sigmoid}(z_2) \quad (\text{二分類}) ypred?=Softmax(z2?)(多分類)Sigmoid(z2?)(二分類)

向量化計算的優勢

  • 利用矩陣運算(如 numpy.dot)高效處理批量數據,加速訓練。
  • 示例:一次性計算100個樣本的前向傳播(輸入矩陣維度 100 × n 100 \times n 100×n)。

3.3 激活函數的關鍵角色
常用激活函數對比

函數名稱公式特點與適用場景
Sigmoid σ ( z ) = 1 1 + e ? z \sigma(z) = \frac{1}{1+e^{-z}} σ(z)=1+e?z1?輸出范圍[0,1],適合概率輸出;易梯度消失。
ReLU ReLU ( z ) = max ? ( 0 , z ) \text{ReLU}(z) = \max(0, z) ReLU(z)=max(0,z)緩解梯度消失,計算高效;廣泛用于隱藏層。
Tanh tanh ? ( z ) = e z ? e ? z e z + e ? z \tanh(z) = \frac{e^z - e^{-z}}{e^z + e^{-z}} tanh(z)=ez+e?zez?e?z?輸出范圍[-1,1],中心對稱;梯度強于Sigmoid。

為什么需要非線性激活函數?

  • 若全使用線性函數(如恒等變換),多層網絡等效于單層線性變換,失去深層結構的價值。
  • 非線性激活函數使網絡能夠擬合任意復雜函數(參見通用近似定理)。

4. 實戰示例

4.1 單層感知機實現邏輯AND運算
目標:通過感知機模型學習AND邏輯的真值表(僅當兩輸入均為1時輸出1)。

代碼實現

import numpy as npclass Perceptron:def __init__(self, input_size, lr=0.1):self.weights = np.zeros(input_size)  # 初始化權重self.bias = 0                        # 初始化偏置self.lr = lr                         # 學習率def step_function(self, z):"""階躍函數"""return 1 if z >= 0 else 0def train(self, X, y, epochs=100):"""訓練過程:逐樣本更新權重"""for _ in range(epochs):for x_i, y_true in zip(X, y):# 計算凈輸入與預測值z = np.dot(x_i, self.weights) + self.biasy_pred = self.step_function(z)# 計算誤差并更新參數error = y_true - y_predself.weights += self.lr * error * x_iself.bias += self.lr * error# 定義AND邏輯的輸入與標簽
X = np.array([[0,0], [0,1], [1,0], [1,1]])
y = np.array([0, 0, 0, 1])# 訓練感知機
perceptron = Perceptron(input_size=2)
perceptron.train(X, y, epochs=10)# 輸出訓練后的參數
print("訓練后權重:", perceptron.weights)  # 預期輸出接近 [1, 1]
print("訓練后偏置:", perceptron.bias)    # 預期輸出接近 -1.5

輸出結果驗證

  • 輸入 [1, 1] 時,計算 ( z = 11 + 11 - 1.5 = 0.5 ),輸出1(正確分類)。
  • 其他輸入(如 [0,1])均輸出0。

4.2 多層神經網絡解決XOR問題
目標:構建含隱藏層的神經網絡,解決感知機無法處理的異或(XOR)分類任務。

代碼實現(使用Keras)

import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense# XOR問題的輸入與標簽
X_xor = np.array([[0,0], [0,1], [1,0], [1,1]])
y_xor = np.array([0, 1, 1, 0])# 定義模型結構
model = Sequential([Dense(2, activation='relu', input_shape=(2,)),  # 隱藏層(2個神經元,ReLU激活)Dense(1, activation='sigmoid')                 # 輸出層(Sigmoid輸出概率)
])# 編譯模型:指定優化器和損失函數
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])# 訓練模型
model.fit(X_xor, y_xor, epochs=1000, verbose=0)# 預測并輸出結果
predictions = model.predict(X_xor).round()
print("XOR預測結果:", predictions.flatten())  # 預期輸出 [0, 1, 1, 0]

關鍵解釋

  • 隱藏層設計:2個神經元足以學習XOR的非線性邊界。
  • 激活函數選擇:隱藏層使用ReLU加速訓練,輸出層使用Sigmoid輸出概率。
  • 優化器與損失:Adam優化器自適應調整學習率,交叉熵損失適合二分類任務。


5. 總結與擴展學習

5.1 核心總結

  • 感知機
    • 單層結構,依賴階躍函數實現二分類。
    • 局限性:僅能解決線性可分問題(如AND、OR),無法處理XOR等非線性任務。
  • 多層神經網絡
    • 通過隱藏層和激活函數(如ReLU、Sigmoid)實現非線性映射。
    • 全連接層的前向傳播是深度學習的基礎框架。

5.2 擴展方向

  1. 反向傳播算法
    • 通過鏈式法則計算損失函數對權重的梯度,利用梯度下降優化參數。
    • 核心公式(均方誤差損失為例):
      ? L ? w = ? L ? y pred ? ? y pred ? z ? ? z ? w \frac{\partial L}{\partial w} = \frac{\partial L}{\partial y_{\text{pred}}} \cdot \frac{\partial y_{\text{pred}}}{\partial z} \cdot \frac{\partial z}{\partial w} ?w?L?=?ypred??L???z?ypred????w?z?
  2. 現代網絡結構
    • 卷積神經網絡(CNN):局部感知與參數共享,高效處理圖像數據。
    • 循環神經網絡(RNN):時序數據處理(如文本、語音)。
    • Transformer:自注意力機制,主導自然語言處理(如BERT、GPT)。
  3. 訓練優化技巧
    • 批量歸一化(BatchNorm):加速訓練,減少對初始化的敏感度。
    • Dropout:隨機屏蔽神經元,防止過擬合。
    • 學習率調度:動態調整學習率(如余弦退火)。

6. 常見問題QA

Q1: 為什么感知機不能解決異或(XOR)問題?
A: 單層感知機本質是線性分類器,而XOR需要非線性決策邊界(如圓形或曲線)。多層神經網絡通過隱藏層的非線性激活函數組合多個線性邊界,解決此類問題。

Q2: 如何選擇隱藏層的神經元數量和層數?
A: 需通過實驗調整:

  • 簡單任務(如XOR):1層隱藏層 + 2~4個神經元。
  • 復雜任務(如圖像分類):深層網絡(如ResNet有50層以上)。
  • 過擬合時減少層數或神經元,欠擬合時增加。

Q3: 激活函數可以全部使用ReLU嗎?
A: 隱藏層通常優先使用ReLU(緩解梯度消失),但輸出層需根據任務選擇:

  • 二分類:Sigmoid。
  • 多分類:Softmax。
  • 回歸:線性或恒等函數。

Q4: 神經網絡是否層數越多越好?
A: 并非絕對。層數增加可能導致:

  • 梯度消失/爆炸(需結合殘差連接、歸一化)。
  • 訓練時間與算力需求激增。
  • 過擬合風險上升(需正則化、數據增強)。

Q5: 如何調試神經網絡的性能問題?
A: 分步驟排查:

  1. 檢查數據質量(標簽正確性、缺失值)。
  2. 監控訓練損失:
    • 損失不下降:可能學習率過低、模型容量不足。
    • 損失震蕩:可能學習率過高、數據噪聲大。
  3. 使用驗證集評估過擬合/欠擬合。

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

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

相關文章

sparkSQL讀入csv文件寫入mysql(2)

(二)創建數據庫和表 接下來,我們去創建一個新的數據庫,數據表,并插入一條數據。 -- 創建數據庫 CREATE DATABASE spark; -- 使用數據庫 USE spark;-- 創建表 create table person(id int, name char(20), age int);-- …

JVM如何處理多線程內存搶占問題

目錄 1、堆內存結構 2、運行時數據 3、內存分配機制 3.1、堆內存結構 3.2、內存分配方式 1、指針碰撞 2、空閑列表 4、jvm內存搶占方案 4.1、TLAB 4.2、CAS 4.3、鎖優化 4.4、逃逸分析與棧上分配 5、問題 5.1、內存分配競爭導致性能下降 5.2、偽共享&#xff08…

Ubuntu---omg又出bug了

自用遇到問題的合集 250518——桌面文件突然消失 ANS:參考博文

正則表達式與文本處理的藝術

引言 在前端開發領域,文本處理是一項核心技能。正則表達式作為一種強大的模式匹配工具,能夠幫助我們高效地處理各種復雜的文本操作任務。 正則表達式基礎 什么是正則表達式? 正則表達式是一種用于匹配字符串中字符組合的模式。它由一系列…

初學c語言15(字符和字符串函數)

一.字符串分類函數 頭文件:ctype.h 作用:判斷是什么類型的字符 函數舉例: 函數 符合條件就為真 islower判斷是否為小寫字符(a~z)isupper判斷是否為大寫字符(A~Z)isdigit十進制數字&#xf…

12-串口外設

一、串口外設的基本概述 1、基本定義 串口通信,通過在通信雙方之間以比特位(bit)的形式逐一發送或接收數據,實現了信息的有效傳遞。其通信方式不僅簡單可靠,而且成本很低。 2、stm32的串口 下面是兩個MCU的數據交互&…

NE555雙音門鈴實驗

1腳為地。通常被連接到電路共同接地。 2腳為觸發輸入端。 3腳為輸出端,輸出的電平狀態受觸發器的控制,而觸發器受上比較器6腳和下比較器2腳的控制。當觸發器接受上比較器A1從R腳輸入的高電平時,觸發器被置于復位狀態,3腳輸出低電…

Redis分布式鎖實現

概述 為什么要要分布式鎖 在并發編程中,我們通過鎖,來避免由于競爭而造成的數據不一致問題。 通常,我們以synchronized 、Lock來使用它。Java中的鎖,只能保證在同一個JVM進程內中執行 如果需要在分布式集群環境下的話&#xff0…

軟件設計師-錯題筆記-網絡基礎知識

1. 解析: 1.子網劃分相關知識: 在IPv4地址中,/27表示子網掩碼為255.255.255.224,它將一個C類網絡(默認子網掩碼255.255.255.0)進一步劃分 對于子網掩碼255.255.255.224,其對應的二進制為111…

Fine-Tuning Llama2 with LoRA

Fine-Tuning Llama2 with LoRA 1. What is LoRA?2. How does LoRA work?3. Applying LoRA to Llama2 models4. LoRA finetuning recipe in torchtune5. Trading off memory and model performance with LoRAModel ArgumentsReferences https://docs.pytorch.org/torchtune/ma…

python打卡day29

類的裝飾器 知識點回顧 類的裝飾器裝飾器思想的進一步理解:外部修改、動態類方法的定義:內部定義和外部定義 回顧一下,函數的裝飾器是 :接收一個函數,返回一個修改后的函數。類也有修飾器,類裝飾器本質上確…

十一、STM32入門學習之FREERTOS移植

目錄 一、FreeRTOS1、源碼下載:2、解壓源碼 二、移植步驟一:在需要移植的項目中新建myFreeRTOS的文件夾,用于存放FREERTOS的相關源碼步驟二:keil中包含相關文件夾和文件引用路徑步驟三:修改FreeRTOSConfig.h文件的相關…

2025 年十大網絡安全預測

隨著我們逐步邁向 2026 年,網絡安全領域正處于一個關鍵的轉折點,技術創新與數字威脅以前所未有的復雜態勢交織在一起。 地緣政治環境進一步加劇了這些網絡安全挑戰,國際犯罪組織利用先進的技術能力來追求戰略目標。 人工智能在這一不斷演變…

Mac 環境下 JDK 版本切換全指南

概要 在 macOS 上安裝了多個 JDK 后,可以通過系統自帶的 /usr/libexec/java_home 工具來查詢并切換不同版本的 Java。只需在終端中執行 /usr/libexec/java_home -V 列出所有已安裝的 JDK,然后將你想使用的版本路徑賦值給環境變量 JAVA_HOME,…

中級網絡工程師知識點6

1.堆疊方式可以共享使用交換機背板帶寬;級聯方式可以使用雙絞線將交換機連接在一起 2.光功率計是專門測量光功率大小的儀器,在對光纜進行檢測時,通過在光纜的發送端和接收端分別測量光功率,進而計算出光衰情況。 3.光時域反射計…

動態規劃——烏龜棋

題目描述 解題思路 首先這是一個很明顯的線性dp的題目,很容易發現規律 數據輸入 我們用 h[ N ] 數組存儲每一個格子的分數 用 cnt [ ],數組表示每一中卡片的數目 1,狀態表示 因為這里一個有4種跳躍方式可以選擇 f[ i ][ a ][ b ][ c ][ d…

C#自定義控件-實現了一個支持平移、縮放、雙擊重置的圖像顯示控件

1. 控件概述 這是一個繼承自 Control 的自定義控件,主要用于圖像的顯示和交互操作,具有以下核心功能: 圖像顯示與縮放(支持鼠標滾輪縮放)圖像平移(支持鼠標拖拽)視圖重置(雙擊重置…

C++ map multimap 容器:賦值、排序、大小與刪除操作

概述 map和multimap是C STL中的關聯容器,它們存儲的是鍵值對(key-value pairs),并且會根據鍵(key)自動排序。兩者的主要區別在于: map不允許重復的鍵multimap允許重復的鍵 本文將詳細解析示例代碼中涉及的map操作,包括賦值、排…

AI Agent開發第70課-徹底消除RAG知識庫幻覺(4)-解決知識庫問答時語料“總重復”問題

開篇 “解決知識庫幻覺”系列還在繼續,這是因為:如果只是個人玩玩,像自媒體那些說的什么2小時搭一個知識庫+deepseek不要太香一類的RAG或者是基于知識庫的應用肯定是沒法用在企業級落地上的。 我們真的經歷過或者正在經歷的人都是知道的,怎么可能2小時就搭建完成一個知識…

【DAY22】 復習日

內容來自浙大疏錦行python打卡訓練營 浙大疏錦行 仔細回顧一下之前21天的內容 作業: 自行學習參考如何使用kaggle平臺,寫下使用注意點,并對下述比賽提交代碼 kaggle泰坦里克號人員生還預測