news 2026/4/15 14:46:12

神经网络学习

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
神经网络学习

神经网络学习

1. 神经元模型

神经网络的研究始于对生物神经系统的模拟。生物神经元通过突触相互连接,当一个神经元接收到的电信号超过一定阈值(Threshold)时,它就会被激活(兴奋),向其他神经元发送化学物质。

1.1 M-P 神经元模型

1943年,McCulloch和Pitts将上述生物过程抽象为M-P神经元模型。这是现代神经网络的基石。

在这个模型中,神经元接收来自nnn个其他神经元传递过来的输入信号。这些信号并非等同视之,而是通过带权重的连接(Connection Weight)进行传递。

数学定义:
假设第iii个输入信号为xix_ixi,对应的权重为wiw_iwi,神经元的阈值为θ\thetaθ。神经元接收到的总输入与阈值进行比较,然后通过一个激活函数(Activation Function)fff处理以产生输出yyy

公式如下:
y=f(∑i=1nwixi−θ) y = f\left( \sum_{i=1}^{n} w_i x_i - \theta \right)y=f(i=1nwixiθ)

1.2 激活函数的选择

理想的激活函数是阶跃函数,即:
sgn(x)={1,x≥00,x<0 \text{sgn}(x) = \begin{cases} 1, & x \ge 0 \\ 0, & x < 0 \end{cases}sgn(x)={1,0,x0x<0
但这函数不连续、不光滑,性质不好。因此,实际中常用Sigmoid函数(也称Logistic函数)作为激活函数。它将较大范围的输入挤压到(0,1)(0, 1)(0,1)区间内,且具有良好的数学性质(处处可导)。

Sigmoid函数公式:
sigmoid(x)=11+e−x \text{sigmoid}(x) = \frac{1}{1 + e^{-x}}sigmoid(x)=1+ex1

重要性质:Sigmoid函数的导数性质在后续BP推导中至关重要:
f′(x)=f(x)(1−f(x)) f'(x) = f(x)(1 - f(x))f(x)=f(x)(1f(x))

importnumpyasnpimportmatplotlib.pyplotaspltdefsigmoid(x):"""Sigmoid 激活函数"""return1/(1+np.exp(-x))defsigmoid_derivative(x):"""Sigmoid 导数: f'(x) = f(x)(1 - f(x))"""s=sigmoid(x)returns*(1-s)# 测试代码x=np.arange(-6,6,0.1)y=sigmoid(x)dy=sigmoid_derivative(x)# 导数最大值在0处,两端趋向于0(梯度消失)print(f"Sigmoid(0) ={sigmoid(0)}")# 输出 0.5print(f"Derivative(0) ={sigmoid_derivative(0)}")# 输出 0.25

2. 感知机与多层网络

2.1 感知机 (Perceptron)

感知机由两层神经元组成:输入层和输出层。输入层只负责传递信号,输出层是M-P神经元。

感知机能容易地实现逻辑运算。例如:

  • 与 (x1∧x2x_1 \wedge x_2x1x2):令w1=w2=1,θ=2w_1=w_2=1, \theta=2w1=w2=1,θ=2,则仅当x1=x2=1x_1=x_2=1x1=x2=1时,1⋅1+1⋅1−2=0≥01\cdot1 + 1\cdot1 - 2 = 0 \ge 011+112=00,输出1。
  • 或 (x1∨x2x_1 \vee x_2x1x2):令w1=w2=1,θ=0.5w_1=w_2=1, \theta=0.5w1=w2=1,θ=0.5
  • 非 (¬x1\neg x_1¬x1):令w1=−0.6,θ=−0.5w_1=-0.6, \theta=-0.5w1=0.6,θ=0.5

感知机的学习规则:
给定训练样例(x,y)(\boldsymbol{x}, y)(x,y),若当前输出为y^\hat{y}y^,则权重调整规则为:
wi←wi+Δwi w_i \leftarrow w_i + \Delta w_iwiwi+ΔwiΔwi=η(y−y^)xi \Delta w_i = \eta (y - \hat{y}) x_iΔwi=η(yy^)xi其中η∈(0,1)\eta \in (0,1)η(0,1)称为学习率 (Learning Rate)

  • 若预测正确 (y=y^y = \hat{y}y=y^),权重不更新。
  • 若预测错误,权重会向减少误差的方向调整。
importnumpyasnp# 数据集:逻辑与 (AND)X=np.array([[0,0],[0,1],[1,0],[1,1]])y=np.array([0,0,0,1])# 初始化参数w=np.zeros(2)# 权重b=0# 阈值 (bias)lr=0.1# 学习率 etadefstep_function(x):return1ifx>=0else0# 训练过程forepochinrange(10):foriinrange(len(X)):xi=X[i]target=y[i]# 前向传播output=step_function(np.dot(w,xi)+b)# 权重更新规则error=target-outputiferror!=0:w+=lr*error*xi b+=lr*error# 阈值更新类似权重,输入视为1print(f"训练后权重:{w}, 阈值:{b}")# 验证:[1, 1] -> 1*w1 + 1*w2 + b 应该 >= 0

2.2 线性可分与异或问题

感知机本质上是在寻找一个线性超平面(Linear Hyperplane)将两类样本分开。

  • 对于线性可分问题(如与、或、非),感知机一定收敛。
  • 对于非线性可分问题(如异或 XOR),单层感知机无法解决,学习过程会发生振荡。

要解决非线性问题,我们需要多层功能神经元,即引入隐层 (Hidden Layer)。隐层和输出层神经元都拥有激活函数。这种结构被称为多层前馈神经网络 (Multi-layer Feedforward Neural Networks)


3. 误差逆传播算法 (BP算法)

多层网络的学习能力比单层感知机强得多,但如何训练多层网络?误差逆传播 (Error BackPropagation, BP) 算法是目前最杰出的解决方法。

3.1 变量定义与网络结构

为了清晰地进行数学推导,我们先严格定义符号:

  • 数据集D={(xk,yk)}k=1mD = \{(\boldsymbol{x}_k, \boldsymbol{y}_k)\}_{k=1}^mD={(xk,yk)}k=1m,输入维度ddd,输出维度lll
  • 网络结构
    • 输入层神经元个数:ddd
    • 隐层神经元个数:qqq
    • 输出层神经元个数:lll
  • 权重与阈值(我们要学习的参数):
    • vihv_{ih}vih:输入层第iii个神经元到隐层第hhh个神经元的权重。
    • whjw_{hj}whj:隐层第hhh个神经元到输出层第jjj个神经元的权重。
    • γh\gamma_hγh:隐层第hhh个神经元的阈值。
    • θj\theta_jθj:输出层第jjj个神经元的阈值。
  • 中间变量
    • αh=∑i=1dvihxi\alpha_h = \sum_{i=1}^d v_{ih} x_iαh=i=1dvihxi:隐层第hhh个神经元的接收输入。
    • bh=f(αh−γh)b_h = f(\alpha_h - \gamma_h)bh=f(αhγh):隐层第hhh个神经元的输出。
    • βj=∑h=1qwhjbh\beta_j = \sum_{h=1}^q w_{hj} b_hβj=h=1qwhjbh:输出层第jjj个神经元的接收输入。
    • y^j=f(βj−θj)\hat{y}_j = f(\beta_j - \theta_j)y^j=f(βjθj):输出层第jjj个神经元的最终输出。

3.2 损失函数 (Loss Function)

对于第kkk个训练样例(xk,yk)(\boldsymbol{x}_k, \boldsymbol{y}_k)(xk,yk),网络的预测输出为y^k\hat{\boldsymbol{y}}_ky^k,均方误差(Mean Squared Error)定义为:
Ek=12∑j=1l(y^jk−yjk)2 E_k = \frac{1}{2} \sum_{j=1}^{l} (\hat{y}_j^k - y_j^k)^2Ek=21j=1l(y^jkyjk)2
这里的12\frac{1}{2}21是为了方便求导时抵消指数。

3.3 BP算法推导过程

BP算法基于梯度下降 (Gradient Descent)策略,即以目标的负梯度方向对参数进行调整。我们需要针对四组参数 (whj,θj,vih,γhw_{hj}, \theta_j, v_{ih}, \gamma_hwhj,θj,vih,γh) 分别求偏导。

第一步:更新输出层权重whjw_{hj}whj

我们要求∂Ek∂whj\frac{\partial E_k}{\partial w_{hj}}whjEk。根据链式法则 (Chain Rule),误差EkE_kEk先影响输出y^j\hat{y}_jy^j,再由y^j\hat{y}_jy^j影响输入βj\beta_jβj,最后由βj\beta_jβj影响权重whjw_{hj}whj

∂Ek∂whj=∂Ek∂y^j⋅∂y^j∂βj⋅∂βj∂whj \frac{\partial E_k}{\partial w_{hj}} = \frac{\partial E_k}{\partial \hat{y}_j} \cdot \frac{\partial \hat{y}_j}{\partial \beta_j} \cdot \frac{\partial \beta_j}{\partial w_{hj}}whjEk=y^jEkβjy^jwhjβj

我们逐项计算:

  1. 第一项∂Ek∂y^j\frac{\partial E_k}{\partial \hat{y}_j}y^jEk
    ∂∂y^j(12∑j=1l(y^j−yj)2)=y^j−yj \frac{\partial}{\partial \hat{y}_j} \left( \frac{1}{2} \sum_{j=1}^{l} (\hat{y}_j - y_j)^2 \right) = \hat{y}_j - y_jy^j(21j=1l(y^jyj)2)=y^jyj
  2. 第二项∂y^j∂βj\frac{\partial \hat{y}_j}{\partial \beta_j}βjy^j
    因为y^j=f(βj−θj)\hat{y}_j = f(\beta_j - \theta_j)y^j=f(βjθj),且fff是Sigmoid函数,利用性质f′(x)=f(x)(1−f(x))f'(x)=f(x)(1-f(x))f(x)=f(x)(1f(x))
    ∂y^j∂βj=f′(βj−θj)=y^j(1−y^j) \frac{\partial \hat{y}_j}{\partial \beta_j} = f'(\beta_j - \theta_j) = \hat{y}_j (1 - \hat{y}_j)βjy^j=f(βjθj)=y^j(1y^j)
  3. 第三项∂βj∂whj\frac{\partial \beta_j}{\partial w_{hj}}whjβj
    因为βj=∑h=1qwhjbh\beta_j = \sum_{h=1}^q w_{hj} b_hβj=h=1qwhjbh
    ∂βj∂whj=bh \frac{\partial \beta_j}{\partial w_{hj}} = b_hwhjβj=bh

定义输出层神经元的梯度项gjg_jgj
我们将前两项合并,定义为−gj-g_jgj
gj=−∂Ek∂y^j⋅∂y^j∂βj=−(y^j−yj)⋅y^j(1−y^j)=y^j(1−y^j)(yj−y^j) g_j = - \frac{\partial E_k}{\partial \hat{y}_j} \cdot \frac{\partial \hat{y}_j}{\partial \beta_j} = -(\hat{y}_j - y_j) \cdot \hat{y}_j (1 - \hat{y}_j) = \hat{y}_j(1-\hat{y}_j)(y_j - \hat{y}_j)gj=y^jEkβjy^j=(y^jyj)y^j(1y^j)=y^j(1y^j)(yjy^j)

因此,权重的更新量为:
Δwhj=−η∂Ek∂whj=ηgjbh \Delta w_{hj} = -\eta \frac{\partial E_k}{\partial w_{hj}} = \eta g_j b_hΔwhj=ηwhjEk=ηgjbh

第二步:更新输出层阈值θj\theta_jθj

同理,
∂Ek∂θj=∂Ek∂y^j⋅∂y^j∂θj \frac{\partial E_k}{\partial \theta_j} = \frac{\partial E_k}{\partial \hat{y}_j} \cdot \frac{\partial \hat{y}_j}{\partial \theta_j}θjEk=y^jEkθjy^j
因为y^j=f(βj−θj)\hat{y}_j = f(\beta_j - \theta_j)y^j=f(βjθj),所以∂y^j∂θj=−f′(βj−θj)\frac{\partial \hat{y}_j}{\partial \theta_j} = -f'(\beta_j - \theta_j)θjy^j=f(βjθj)
结合上面定义的gjg_jgj,可得:
Δθj=−η∂Ek∂θj=−ηgj \Delta \theta_j = -\eta \frac{\partial E_k}{\partial \theta_j} = -\eta g_jΔθj=ηθjEk=ηgj

第三步:更新隐层权重vihv_{ih}vih(关键难点)

这是BP算法体现“误差逆传播”精髓的地方。隐层的输出bhb_hbh影响了输出层所有的神经元,因此误差需要从所有输出神经元反向传回。

∂Ek∂vih=∑j=1l∂Ek∂βj⋅∂βj∂bh⋅∂bh∂αh⋅∂αh∂vih \frac{\partial E_k}{\partial v_{ih}} = \sum_{j=1}^{l} \frac{\partial E_k}{\partial \beta_j} \cdot \frac{\partial \beta_j}{\partial b_h} \cdot \frac{\partial b_h}{\partial \alpha_h} \cdot \frac{\partial \alpha_h}{\partial v_{ih}}vihEk=j=1lβjEkbhβjαhbhvihαh

注意到∂Ek∂βj=−gj\frac{\partial E_k}{\partial \beta_j} = -g_jβjEk=gj(这是我们在第一步计算过的输出层梯度)。

  1. 中间传递∂βj∂bh=whj\frac{\partial \beta_j}{\partial b_h} = w_{hj}bhβj=whj(因为βj=⋯+whjbh+…\beta_j = \dots + w_{hj}b_h + \dotsβj=+whjbh+)。
  2. 隐层激活导数∂bh∂αh=f′(αh−γh)=bh(1−bh)\frac{\partial b_h}{\partial \alpha_h} = f'(\alpha_h - \gamma_h) = b_h(1-b_h)αhbh=f(αhγh)=bh(1bh)
  3. 输入层∂αh∂vih=xi\frac{\partial \alpha_h}{\partial v_{ih}} = x_ivihαh=xi

定义隐层神经元的梯度项ehe_heh
我们将与vihv_{ih}vih无关的求和项提取出来定义为ehe_heh
eh=∂bh∂αh∑j=1l∂Ek∂βj∂βj∂bh=bh(1−bh)∑j=1l(−gj)whj e_h = \frac{\partial b_h}{\partial \alpha_h} \sum_{j=1}^{l} \frac{\partial E_k}{\partial \beta_j} \frac{\partial \beta_j}{\partial b_h} = b_h(1-b_h) \sum_{j=1}^{l} (-g_j) w_{hj}eh=αhbhj=1lβjEkbhβj=bh(1bh)j=1l(gj)whj
整理负号后得到公式:
eh=bh(1−bh)∑j=1lwhjgj e_h = b_h(1-b_h) \sum_{j=1}^{l} w_{hj} g_jeh=bh(1bh)j=1lwhjgj

于是,隐层权重的更新量为:
Δvih=ηehxi \Delta v_{ih} = \eta e_h x_iΔvih=ηehxi

第四步:更新隐层阈值γh\gamma_hγh

同理可得:
Δγh=−ηeh \Delta \gamma_h = -\eta e_hΔγh=ηeh

3.4 BP算法总结

至此,我们得到了完整的参数更新公式:

  1. 计算输出层梯度:gj=y^j(1−y^j)(yj−y^j)g_j = \hat{y}_j(1-\hat{y}_j)(y_j - \hat{y}_j)gj=y^j(1y^j)(yjy^j)
  2. 计算隐层梯度:eh=bh(1−bh)∑j=1lwhjgje_h = b_h(1-b_h) \sum_{j=1}^{l} w_{hj} g_jeh=bh(1bh)j=1lwhjgj
  3. 更新参数:
    • Δwhj=ηgjbh\Delta w_{hj} = \eta g_j b_hΔwhj=ηgjbh
    • Δθj=−ηgj\Delta \theta_j = -\eta g_jΔθj=ηgj
    • Δvih=ηehxi\Delta v_{ih} = \eta e_h x_iΔvih=ηehxi
    • Δγh=−ηeh\Delta \gamma_h = -\eta e_hΔγh=ηeh

算法流程就是:输入信号→\to前向传播计算输出→\to计算误差→\to反向传播计算梯度gj,ehg_j, e_hgj,eh→\to更新权重→\to迭代直到收敛。

importnumpyasnp# 1. 准备数据 (XOR问题)X=np.array([[0,0],[0,1],[1,0],[1,1]])y=np.array([[0],[1],[1],[0]])# 2. 初始化网络结构input_size=2hidden_size=2output_size=1learning_rate=0.1# 初始化权重和阈值 (随机初始化非常重要)# v: 输入层->隐层权重, w: 隐层->输出层权重v=np.random.uniform(size=(input_size,hidden_size))w=np.random.uniform(size=(hidden_size,output_size))# gamma: 隐层阈值, theta: 输出层阈值gamma=np.zeros((1,hidden_size))theta=np.zeros((1,output_size))defsigmoid(x):return1/(1+np.exp(-x))defsigmoid_deriv(x):returnx*(1-x)# 输入是激活后的值# 3. 训练循环 (标准BP算法,单样本更新)forepochinrange(10000):foriinrange(len(X)):# --- 前向传播 ---# 隐层输入 alpha, 输出 bb_input=np.dot(X[i],v)-gamma b=sigmoid(b_input)# 输出层输入 beta, 输出 y_haty_input=np.dot(b,w)-theta y_hat=sigmoid(y_input)# --- 误差逆传播 (Backprop) ---# 计算输出层梯度 g (对应推导中的 g_j)error=y[i]-y_hat g=y_hat*(1-y_hat)*error# 计算隐层梯度 e (对应推导中的 e_h)e=b*(1-b)*np.dot(g,w.T)# --- 更新参数 ---w+=learning_rate*np.dot(b.reshape(-1,1),g.reshape(1,-1))theta-=learning_rate*g v+=learning_rate*np.dot(X[i].reshape(-1,1),e.reshape(1,-1))gamma-=learning_rate*e# 4. 测试print("XOR 预测结果:")foriinrange(len(X)):b=sigmoid(np.dot(X[i],v)-gamma)res=sigmoid(np.dot(b,w)-theta)print(f"输入:{X[i]}-> 预测:{res.round(2)}(真实:{y[i]})")

4. 全局最小 vs. 局部极小

训练神经网络的本质,是在参数空间中寻找一组最优参数(w∗,θ∗)(\boldsymbol{w}^*, \boldsymbol{\theta}^*)(w,θ),使得误差函数EEE最小化。

4.1 数学定义

直观上,全局最小(Global Minimum)是整个山谷的最低点,而局部极小(Local Minimum)只是某个坑底。

对于参数(w∗,θ∗)(\boldsymbol{w}^*, \boldsymbol{\theta}^*)(w,θ),若存在ϵ>0\epsilon > 0ϵ>0,使得对于参数空间内所有满足∣(w;θ)−(w∗;θ∗)∣≤ϵ|(\boldsymbol{w}; \boldsymbol{\theta}) - (\boldsymbol{w}^*; \boldsymbol{\theta}^*)| \le \epsilon(w;θ)(w;θ)ϵ的点,都有:
E(w;θ)≥E(w∗;θ∗) E(\boldsymbol{w}; \boldsymbol{\theta}) \ge E(\boldsymbol{w}^*; \boldsymbol{\theta}^*)E(w;θ)E(w;θ)
则称(w∗;θ∗)(\boldsymbol{w}^*; \boldsymbol{\theta}^*)(w;θ)局部极小解

若对于参数空间中的任意(w;θ)(\boldsymbol{w}; \boldsymbol{\theta})(w;θ)都有上述不等式成立,则称为全局最小解

结论:全局最小一定是局部极小,但局部极小不一定是全局最小。基于梯度的搜索方法(如BP)很容易陷入局部极小,因为在这些点上梯度为0,参数更新会停止。

4.2 跳出局部极小的策略

为了避免模型“死”在半山腰,常用的策略包括:

  1. 多组初始化:像空降兵一样,从不同的位置开始搜索,最后取误差最小的解。
  2. 模拟退火 (Simulated Annealing):源于物理退火原理。每一步以一定概率接受“更差”的结果(即误差增大的结果)。接受次优解的概率随着时间推移逐渐降低。
  3. 随机梯度下降 (SGD):计算梯度时加入随机因素(例如只用一个样本计算梯度),使得即使陷入局部极小,梯度也不完全为0,有机会跳出。

5. 其它神经网络

除了标准的前馈神经网络,针对不同的任务,研究者们设计了多种网络结构。

5.1 RBF网络 (径向基函数网络)

RBF (Radial Basis Function)网络是一种单隐层前馈网络。它的特点是:隐层使用径向基函数作为激活函数,输出层则是隐层输出的线性组合。

假设输入为ddd维向量x\boldsymbol{x}x,输出为实值,RBF网络的数学表示为:
φ(x)=∑i=1qwiρ(x,ci) \varphi(\boldsymbol{x}) = \sum_{i=1}^{q} w_i \rho(\boldsymbol{x}, \boldsymbol{c}_i)φ(x)=i=1qwiρ(x,ci)
其中:

  • qqq是隐层神经元个数。
  • ci\boldsymbol{c}_ici是第iii个隐层神经元的中心 (Center)
  • wiw_iwi是权重。
  • ρ(x,ci)\rho(\boldsymbol{x}, \boldsymbol{c}_i)ρ(x,ci)是径向基函数,最常用的是高斯函数 (Gaussian)
    ρ(x,ci)=e−β∣∣x−ci∣∣2 \rho(\boldsymbol{x}, \boldsymbol{c}_i) = e^{-\beta ||\boldsymbol{x} - \boldsymbol{c}_i||^2}ρ(x,ci)=eβ∣∣xci2

训练策略:通常分两步。

  1. 确定中心ci\boldsymbol{c}_ici:使用聚类算法(如K-means)从数据中找中心。
  2. 确定权重wiw_iwi:固定中心后,这就变成了一个线性方程组求解问题,也可以用BP算法微调。

5.2 ART网络 (自适应谐振理论)

ART (Adaptive Resonance Theory)解决了稳定性-可塑性窘境 (Stability-Plasticity Dilemma):既要学习新知识(可塑性),又要不遗忘旧知识(稳定性)。

  • 机制:竞争型学习(Competitive Learning)。输出层神经元相互竞争,“胜者通吃” (Winner-take-all)
  • 过程:输入样本与各神经元比较相似度。若相似度超过识别阈值,则该神经元微调权重(学习);若都不超过,则产生一个新的神经元来记忆这个新样本(增量学习)。

5.3 SOM网络 (自组织映射)

SOM (Self-Organizing Map)是一种无监督学习算法,能将高维数据映射到低维空间(通常是2D矩阵),同时保持拓扑结构不变(即高维空间相似的样本,在SOM输出层也相邻)。

训练流程

  1. 每个输出神经元拥有一个权向量。
  2. 接收输入样本后,计算距离最近的神经元,称为最佳匹配单元 (Best Matching Unit, BMU)
  3. 更新BMU及其邻域内神经元的权向量,使其向输入样本靠近。
    Δw=η(x−w) \Delta w = \eta (x - w)Δw=η(xw)
    这使得SOM具有聚类和可视化的功能。

5.4 级联相关网络 (Cascade-Correlation)

这是一种结构自适应网络。

  • 构造性:网络从只有输入输出层开始。
  • 级联:随着训练,新的隐层神经元一个接一个地加入,且冻结旧的权重。
  • 相关:训练目标是最大化新神经元输出与网络误差之间的相关性。

5.5 Elman网络 (递归神经网络)

这是RNN (Recurrent Neural Networks)的一种。
与前馈网络不同,隐层的输出会被反馈回来,与下一时刻的输入一起作为新的输入。

  • 结构:增加了接纳单元 (Context Unit),用于存储t−1t-1t1时刻隐层的状态。
  • 功能:能够处理序列数据,具有“记忆”能力。

6. 玻尔兹曼机 (Boltzmann Machine)

这是一类基于能量的模型 (Energy-based Model)。网络状态被定义一个“能量”,训练目的是为了最小化系统的总能量,达到热平衡分布。

6.1 能量函数与概率分布

神经元分为两层:显层(Visible,vvv)和隐层(Hidden,hhh),状态取值为{0,1}\{0, 1\}{0,1}
定义状态向量s∈{0,1}n\boldsymbol{s} \in \{0, 1\}^ns{0,1}n,其能量函数为:
E(s)=−∑i=1n−1∑j=i+1nwijsisj−∑i=1nθisi E(\boldsymbol{s}) = - \sum_{i=1}^{n-1} \sum_{j=i+1}^{n} w_{ij} s_i s_j - \sum_{i=1}^{n} \theta_i s_iE(s)=i=1n1j=i+1nwijsisji=1nθisi
在平衡态下,状态s\boldsymbol{s}s出现的概率服从玻尔兹曼分布
P(s)=e−E(s)Z,Z=∑te−E(t) P(\boldsymbol{s}) = \frac{e^{-E(\boldsymbol{s})}}{Z}, \quad Z = \sum_{\boldsymbol{t}} e^{-E(\boldsymbol{t})}P(s)=ZeE(s),Z=teE(t)
其中ZZZ是配分函数(Partition Function),用于归一化。

6.2 受限玻尔兹曼机 (RBM)

标准玻尔兹曼机全是连接,训练极其困难。实际常用RBM (Restricted Boltzmann Machine)

  • 结构:二部图。显层与隐层全连接,但层内无连接
  • 性质:给定显层,隐层各单元独立;给定隐层,显层各单元独立。
    P(v∣h)=∏i=1dP(vi∣h),P(h∣v)=∏j=1qP(hj∣v) P(\boldsymbol{v}|\boldsymbol{h}) = \prod_{i=1}^{d} P(v_i | \boldsymbol{h}), \quad P(\boldsymbol{h}|\boldsymbol{v}) = \prod_{j=1}^{q} P(h_j | \boldsymbol{v})P(vh)=i=1dP(vih),P(hv)=j=1qP(hjv)

6.3 对比散度 (Contrastive Divergence, CD) 算法

为了训练RBM(求解权重w\boldsymbol{w}w),我们需要最大化训练数据的似然。通常使用CD算法近似梯度更新:

  1. 正相 (Positive Phase):根据输入v\boldsymbol{v}v计算隐层h\boldsymbol{h}h的概率并采样。
  2. 负相 (Negative Phase):根据h\boldsymbol{h}h重构v′\boldsymbol{v}'v,再根据v′\boldsymbol{v}'v生成h′\boldsymbol{h}'h
  3. 权重更新
    Δw=η(vhT−v′h′T) \Delta w = \eta (\boldsymbol{v}\boldsymbol{h}^T - \boldsymbol{v}'\boldsymbol{h}'^T)Δw=η(vhTvhT)
    这里vhT\boldsymbol{v}\boldsymbol{h}^TvhT是数据分布的期望,v′h′T\boldsymbol{v}'\boldsymbol{h}'^TvhT是模型分布的期望近似。

7. 深度学习 (Deep Learning)

随着计算能力的提升和数据量的激增,单隐层网络已无法满足需求,深度学习应运而生。

7.1 为什么变“深”?

理论上,单隐层网络可以逼近任意连续函数。但是,为了达到同样的逼近精度,单隐层网络可能需要指数级增加的神经元。而多层网络通过层层嵌套,能以更少的参数高效地表示复杂的函数(例如:点→\to线→\to→\to形状)。

7.2 深度学习的训练挑战

直接用BP算法训练深层网络(如5层以上)往往很难,原因包括:

  • 梯度消失/爆炸:误差反向传播时,梯度逐层相乘,到底层时往往变得微乎其微或巨大。
  • 发散:容易陷入局部极小或难以收敛。
fromtensorflow.kerasimportlayers,models,regularizers# 定义一个带有正则化机制的网络model=models.Sequential([layers.Dense(100,activation='relu',input_shape=(20,)),# Dropout: 随机让50%的神经元不工作,防止依赖特定路径layers.Dropout(0.5),# L2正则化: 约束权重不要过大,对应公式 E + lambda * sum(w^2)layers.Dense(50,activation='relu',kernel_regularizer=regularizers.l2(0.01)),layers.Dense(1,activation='sigmoid')])

7.3 解决方案一:无监督逐层训练 (Pre-training + Fine-tuning)

这是Hinton在2006年提出的经典思路(深度置信网络 DBN):

  1. 预训练 (Pre-training):每次训练一层。将上一层的输出作为下一层的输入,使用无监督算法(如RBM)进行训练。这相当于把参数初始化到一个较好的位置。
  2. 微调 (Fine-tuning):预训练完成后,对整个网络进行微调(通常使用BP算法)。

7.4 解决方案二:权共享 (Weight Sharing) —— CNN

卷积神经网络 (CNN) 是深度学习在图像领域的代表。

  • 卷积层 (Convolutional Layer):通过卷积核 (Kernel)提取局部特征。
  • 权共享:同一个卷积核在图像上滑动,无论在哪个位置,用的权重是一样的。这极大减少了参数量。
  • 汇合/池化层 (Pooling Layer):对特征图进行下采样(如Max Pooling),减少数据量并保持平移不变性。
importtensorflowastffromtensorflow.kerasimportlayers,models# 构建一个简单的卷积神经网络 (CNN)# 对应书中提到的:卷积层 -> 池化层 -> 堆叠model=models.Sequential([# 卷积层:32个3x3的卷积核,激活函数ReLUlayers.Conv2D(32,(3,3),activation='relu',input_shape=(28,28,1)),# 池化层:2x2最大池化 (下采样)layers.MaxPooling2D((2,2)),# 再接一个卷积层layers.Conv2D(64,(3,3),activation='relu'),layers.MaxPooling2D((2,2)),# 展平后连接全连接层 (传统的BP网络部分)layers.Flatten(),layers.Dense(64,activation='relu'),layers.Dense(10,activation='softmax')# 输出10类])# 打印网络结构,可以看到参数数量的巨大减少model.summary()

7.5 特征学习 (Feature Learning)

深度学习的核心优势在于特征学习(或称表示学习 Representation Learning)。

  • 传统机器学习:依赖人工设计的特征(Feature Engineering),好坏全靠专家经验。
  • 深度学习:将原始数据(如像素)直接输入,通过多层非线性变换,自动学习出从底层(边缘)到高层(物体部件)的特征表示。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/12 5:33:14

终极指南:如何用xformers混合专家模型实现大模型训练突破

终极指南&#xff1a;如何用xformers混合专家模型实现大模型训练突破 【免费下载链接】xformers Hackable and optimized Transformers building blocks, supporting a composable construction. 项目地址: https://gitcode.com/gh_mirrors/xf/xformers 你是否在为训练大…

作者头像 李华
网站建设 2026/4/15 16:02:24

详解十大经典数据挖掘与机器学习算法:从理论到实践

前言 在数据科学、机器学习及人工智能领域&#xff0c;算法是解决问题的核心工具。无论是初学者还是资深工程师&#xff0c;掌握经典算法的原理、适用场景及优缺点都是必修课。 本文将深入剖析十个在工业界和学术界最常被提及的算法&#xff0c;涵盖分类、聚类、关联分析及连接…

作者头像 李华
网站建设 2026/4/14 23:49:39

AI营销获客:2025年地产营销终极案例与应用指南

步入2025年&#xff0c;房地产行业正航行于一片充满挑战与机遇的深海。市场环境的结构性变迁已成定局&#xff1a;一方面&#xff0c;公域流量的获客成本持续攀升&#xff0c;单纯的广告投放已难以为继&#xff1b;另一方面&#xff0c;客户的决策链路愈发冗长繁杂&#xff0c;…

作者头像 李华
网站建设 2026/4/14 17:33:18

Token--大模型时代的“语言积木“

&#x1f31f; 超级详细剖析&#xff1a;Token——大模型时代的"语言积木" AI世界里那个无处不在的"小不点"——Token。它就像大模型的"乐高积木"&#xff0c;没有它&#xff0c;AI就无法理解你的话&#xff0c;也说不出人话。&#x1f50d; 第一…

作者头像 李华
网站建设 2026/4/12 8:39:42

Zen Browser完全体验指南:掌握高效浏览的终极秘诀

Zen Browser完全体验指南&#xff1a;掌握高效浏览的终极秘诀 【免费下载链接】desktop &#x1f300; Experience tranquillity while browsing the web without people tracking you! 项目地址: https://gitcode.com/GitHub_Trending/desktop70/desktop Zen Browser是…

作者头像 李华
网站建设 2026/4/14 20:47:20

15款ohmyzsh主题深度评测:从极简到高信息密度的完美选择

15款ohmyzsh主题深度评测&#xff1a;从极简到高信息密度的完美选择 【免费下载链接】ohmyzsh 项目地址: https://gitcode.com/gh_mirrors/ohmy/ohmyzsh 还在为单调的终端界面烦恼吗&#xff1f;ohmyzsh作为最流行的Zsh配置框架&#xff0c;提供了数十款精心设计的主题…

作者头像 李华