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/15 11:49:29

uniapp+springboot小程序基于Android系统的社区小区物业报修管理系统的设计与实现_35m4wds1--论文

文章目录具体实现截图主要技术与实现手段关于我本系统开发思路java类核心代码部分展示结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;具体实现截图 同行可拿货,招校园代理 u你APPSpring波哦天A你都roid_mwds–论文 系统的社区…

作者头像 李华
网站建设 2026/4/16 10:41:50

系统性地解析——边缘计算(从定义与驱动力、核心架构、关键技术特征、与云计算的范式对比、典型应用场景以及挑战与趋势等方面)

一、定义与核心驱动力1. 定义边缘计算是一种分布式计算范式&#xff0c;其核心思想是将计算、存储、网络资源及服务&#xff0c;从传统的集中式云端下沉并部署到更贴近数据源头或终端用户的网络“边缘”侧。这个“边缘”是一个逻辑概念&#xff0c;指从数据源到云端路径之间的任…

作者头像 李华
网站建设 2026/4/16 10:46:04

Excalidraw安全性评估:数据本地存储无泄露风险

Excalidraw安全性评估&#xff1a;数据本地存储无泄露风险 在远程协作日益成为常态的今天&#xff0c;团队对可视化工具的需求早已超越“能画图”的基本功能。从产品原型到系统架构设计&#xff0c;一张白板可能承载着尚未公开的技术方案、敏感业务流程甚至核心知识产权。一旦…

作者头像 李华
网站建设 2026/4/16 10:40:45

41、Samba 工具集:功能与使用指南

Samba 工具集:功能与使用指南 1. 常用 Samba 工具概述 Samba 提供了一系列实用工具,用于不同的网络和账户管理任务。以下是部分常用工具及其功能介绍: | 工具名称 | 功能描述 | | — | — | | nmblookup | 将 NetBIOS 计算机名解析为 IP 地址,类似 Windows 版的 nslook…

作者头像 李华
网站建设 2026/4/1 6:11:46

AdGuard Home终极配置指南:从基础部署到性能极限优化

作为网络级DNS服务器&#xff0c;AdGuard Home的配置质量直接决定了广告拦截效果和网络性能表现。很多用户在初次部署后都会遇到查询延迟增加、规则冲突频发、内存占用异常等典型问题。本文将采用"问题诊断→解决方案→效果验证"的三段式结构&#xff0c;为你提供一套…

作者头像 李华
网站建设 2026/4/15 22:37:20

终极指南:如何用Godot光照贴图烘焙打造电影级游戏场景

还在为游戏场景光照效果生硬而烦恼吗&#xff1f;想要在保证性能的同时获得逼真的光影效果&#xff1f;今天我将为你完整揭秘Godot引擎中光照贴图烘焙的完整流程&#xff0c;让你在3步之内掌握这项核心技术&#xff01;&#x1f3af; 【免费下载链接】godot Godot Engine&#…

作者头像 李华