:深度學(xué)習(xí)基礎(chǔ):從神經(jīng)元到完整訓(xùn)練流程)
前言:深度學(xué)習(xí)不是什么黑科技深度學(xué)習(xí)本質(zhì)上是一個(gè)數(shù)學(xué)函數(shù)擬合器——給它大量輸入輸出數(shù)據(jù),它自動(dòng)找出它們之間的復(fù)雜關(guān)系。舉個(gè)例子:給你一百萬張貓的圖片,每張圖片對(duì)應(yīng)"貓"這個(gè)標(biāo)簽 → 深度學(xué)習(xí)自動(dòng)找出什么樣的像素組合看起來像貓給你十億句人類語言,每句話的下一個(gè)詞作為目標(biāo) → 深度學(xué)習(xí)自動(dòng)學(xué)會(huì)給定上文,下一個(gè)詞最可能是什么深度學(xué)習(xí)的核心優(yōu)勢(shì):隨著數(shù)據(jù)量增加,效果持續(xù)提升——這是傳統(tǒng)機(jī)器學(xué)習(xí)做不到的。一、神經(jīng)網(wǎng)絡(luò)數(shù)學(xué)基礎(chǔ)深度學(xué)習(xí)建立在三個(gè)數(shù)學(xué)分支之上:線性代數(shù)、微積分、概率論。1.1 線性代數(shù):矩陣乘法神經(jīng)網(wǎng)絡(luò)最基本的運(yùn)算就是矩陣乘法——它能簡(jiǎn)潔地表示"多個(gè)輸入經(jīng)過多個(gè)神經(jīng)元變換"。python復(fù)制下載import numpy as np # 輸入:[身高, 體重, 年齡] x = np.array([175, 70, 25]) # 權(quán)重矩陣:2個(gè)神經(jīng)元,每個(gè)接收3個(gè)輸入 W = np.array([ [0.1, 0.2, 0.3], # 神經(jīng)元1的權(quán)重 [0.4, 0.5, 0.6], # 神經(jīng)元2的權(quán)重 ]) b = np.array([0.1, 0.2]) # 矩陣乘法:y = W·x + b y = W @ x + b print(f"輸出: {y}") # 兩個(gè)神經(jīng)元的輸出關(guān)鍵洞察:如果每一層都只是矩陣乘法,無論網(wǎng)絡(luò)多深都等價(jià)于單層網(wǎng)絡(luò)——這就是為什么需要激活函數(shù)來引入非線性。1.2 微積分:導(dǎo)數(shù)與鏈?zhǔn)椒▌t訓(xùn)練神經(jīng)網(wǎng)絡(luò)的核心是梯度下降——找到讓損失最小的參數(shù)方向。python復(fù)制下載# 導(dǎo)數(shù)的直觀理解:f'(x) = lim(h→0) [f(x+h) - f(x)] / h def f(x): return x ** 2 x, h = 3.0, 1e-6 derivative = (f(x+h) - f(x)) / h print(f"f'(3) ≈ {derivative}") # 約等于6鏈?zhǔn)椒▌t是反向傳播的數(shù)學(xué)基礎(chǔ)——把復(fù)雜函數(shù)拆成簡(jiǎn)單函數(shù),分別求導(dǎo)再相乘。1.3 概率論:條件概率與Softmax分類問題中,神經(jīng)網(wǎng)絡(luò)輸出的是概率分布——給定輸入,每個(gè)類別的概率。python復(fù)制下載def softmax(x): """把任意實(shí)數(shù)轉(zhuǎn)換成概率分布(和為1)""" exp_x = np.exp(x - np.max(x)) return exp_x / np.sum(exp_x) logits = np.array([2.0, 1.0, 0.5]) # 貓、狗、鳥的分?jǐn)?shù) probs = softmax(logits) print(f"概率: 貓{probs[0]:.2%}, 狗{probs[1]:.2%}, 鳥{probs[2]:.2%}")二、前向傳播:數(shù)據(jù)流過網(wǎng)絡(luò)前向傳播就是輸入數(shù)據(jù)"流過"神經(jīng)網(wǎng)絡(luò)的計(jì)算過程。2.1 計(jì)算圖每一層可抽象為:a? = activation(W? · a??? + b?)python復(fù)制下載def relu(x): return np.maximum(0, x) # 兩層網(wǎng)絡(luò):輸入(2)→隱藏(3)→輸出(2) x = np.array([1.0, 2.0]) W1 = np.array([[0.1,0.2],[0.3,0.4],[0.5,0.6]]) b1 = np.array([0.1,0.2,0.3]) W2 = np.array([[0.1,0.2,0.3],[0.4,0.5,0.6]]) b2 = np.array([0.1,0.2]) z1 = W1 @ x + b1 # 隱藏層線性變換 a1 = relu(z1) # 隱藏層激活 z2 = W2 @ a1 + b2 # 輸出層線性變換 print(f"輸出: {z2}")三、激活函數(shù)沒有激活函數(shù),深層網(wǎng)絡(luò)等價(jià)于單層網(wǎng)絡(luò)。激活函數(shù)引入非線性,讓網(wǎng)絡(luò)能學(xué)習(xí)復(fù)雜模式。3.1 常用激活函數(shù)對(duì)比函數(shù)公式優(yōu)點(diǎn)缺點(diǎn)適用場(chǎng)景