当前位置: 首页 > news >正文

神经网络学习

神经网络学习

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=1∑n​wi​xi​−θ)

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,​x≥0x<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+e−x1​

重要性质:Sigmoid函数的导数性质在后续BP推导中至关重要:
f′(x)=f(x)(1−f(x)) f'(x) = f(x)(1 - f(x))f′(x)=f(x)(1−f(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_2x1​∧x2​):令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 01⋅1+1⋅1−2=0≥0,输出1。
  • 或 (x1∨x2x_1 \vee x_2x1​∨x2​):令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_iwi​←wi​+Δwi​Δwi=η(y−y^)xi \Delta w_i = \eta (y - \hat{y}) x_iΔwi​=η(y−y^​)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=1d​vih​xi​:隐层第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=1q​whj​bh​:输出层第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​=21​j=1∑l​(y^​jk​−yjk​)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}}∂whj​∂Ek​​。根据链式法则 (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}}∂whj​∂Ek​​=∂y^​j​∂Ek​​⋅∂βj​∂y^​j​​⋅∂whj​∂βj​​

我们逐项计算:

  1. 第一项∂Ek∂y^j\frac{\partial E_k}{\partial \hat{y}_j}∂y^​j​∂Ek​​:
    ∂∂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_j∂y^​j​∂​(21​j=1∑l​(y^​j​−yj​)2)=y^​j​−yj​
  2. 第二项∂y^j∂βj\frac{\partial \hat{y}_j}{\partial \beta_j}∂βj​∂y^​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)(1−f(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)∂βj​∂y^​j​​=f′(βj​−θj​)=y^​j​(1−y^​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=1q​whj​bh​:
    ∂βj∂whj=bh \frac{\partial \beta_j}{\partial w_{hj}} = b_h∂whj​∂βj​​=bh​

定义输出层神经元的梯度项gjg_jgj​:
我们将前两项合并,定义为−gj-g_j−gj​:
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^​j​∂Ek​​⋅∂βj​∂y^​j​​=−(y^​j​−yj​)⋅y^​j​(1−y^​j​)=y^​j​(1−y^​j​)(yj​−y^​j​)

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

第二步:更新输出层阈值θ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}∂θj​∂Ek​​=∂y^​j​∂Ek​​⋅∂θj​∂y^​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)∂θj​∂y^​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​=−η∂θj​∂Ek​​=−η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}}∂vih​∂Ek​​=j=1∑l​∂βj​∂Ek​​⋅∂bh​∂βj​​⋅∂αh​∂bh​​⋅∂vih​∂αh​​

注意到∂Ek∂βj=−gj\frac{\partial E_k}{\partial \beta_j} = -g_j∂βj​∂Ek​​=−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​=⋯+whj​bh​+…)。
  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)∂αh​∂bh​​=f′(αh​−γh​)=bh​(1−bh​)。
  3. 输入层∂αh∂vih=xi\frac{\partial \alpha_h}{\partial v_{ih}} = x_i∂vih​∂α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​=∂αh​∂bh​​j=1∑l​∂βj​∂Ek​​∂bh​∂βj​​=bh​(1−bh​)j=1∑l​(−gj​)whj​
整理负号后得到公式:
eh=bh(1−bh)∑j=1lwhjgj e_h = b_h(1-b_h) \sum_{j=1}^{l} w_{hj} g_jeh​=bh​(1−bh​)j=1∑l​whj​gj​

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

第四步:更新隐层阈值γ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​(1−y^​j​)(yj​−y^​j​)
  2. 计算隐层梯度:eh=bh(1−bh)∑j=1lwhjgje_h = b_h(1-b_h) \sum_{j=1}^{l} w_{hj} g_jeh​=bh​(1−bh​)∑j=1l​whj​gj​
  3. 更新参数:
    • Δwhj=ηgjbh\Delta w_{hj} = \eta g_j b_hΔwhj​=ηgj​bh​
    • Δθj=−ηgj\Delta \theta_j = -\eta g_jΔθj​=−ηgj​
    • Δvih=ηehxi\Delta v_{ih} = \eta e_h x_iΔvih​=ηeh​xi​
    • Δγ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=1∑q​wi​ρ(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−β∣∣x−ci​∣∣2

训练策略:通常分两步。

  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=η(x−w)
    这使得SOM具有聚类和可视化的功能。

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

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

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

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

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

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

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=1∑n−1​j=i+1∑n​wij​si​sj​−i=1∑n​θi​si​
在平衡态下,状态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)=Ze−E(s)​,Z=t∑​e−E(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(v∣h)=i=1∏d​P(vi​∣h),P(h∣v)=j=1∏q​P(hj​∣v)

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=η(vhT−v′h′T)
    这里vhT\boldsymbol{v}\boldsymbol{h}^TvhT是数据分布的期望,v′h′T\boldsymbol{v}'\boldsymbol{h}'^Tv′h′T是模型分布的期望近似。

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),好坏全靠专家经验。
  • 深度学习:将原始数据(如像素)直接输入,通过多层非线性变换,自动学习出从底层(边缘)到高层(物体部件)的特征表示。
http://www.cnnetsun.cn/news/82602.html

相关文章:

  • CasperJS API测试终极指南:构建高效的数据一致性验证体系
  • uniapp+springboot基于微信小程序的学生宿舍报修系统的设计与实现_a1o96z7c
  • 知识产权企业选择CRM系统时,最应关注的核心功能是什么?
  • HyperDX ClickHouse物化视图:构建实时数据分析的终极加速引擎
  • Windows Server 2022官方镜像完整获取指南:从下载到验证的全流程
  • AndroidGen-GLM-4-9B:开启移动智能体新时代的革命性突破
  • 微服务架构下的分布式数据加密:SQLCipher实战指南
  • 国产开源,含20+视频AI算法模型,兼容GB28181、ONVIF、RTMP协议、私有化部署,10天搞定IoT物联网项目交付
  • 16、搭建 Asterisk VoIP 服务器全攻略
  • Apache Mesos集群运维实战:故障恢复与版本管理完全指南
  • 探索式测试的Session管理法:提升软件测试效率与可追溯性
  • 购物省钱参考:爱创猫电商优惠券领取方式
  • 12、Red Hat Enterprise Linux硬件分析与管理指南
  • 35、Linux 内核监控与调试:NUMA、AltSysRq 及 Kdump 全解析
  • DataEase开源BI工具完整指南:从零开始的数据可视化之旅
  • Gutenberg性能优化终极指南:零成本加速WordPress编辑器
  • ag-ui与LangGraph集成终极指南:构建企业级AI工作流的完整教程
  • 2026毕设ssm+vue基于架构的校园二手物品交易论文+程序
  • 手机强制开启USB调试模式终极指南:轻松解决设备连接难题
  • DataEase开源BI工具完整安装配置指南:从零开始快速部署
  • ReClassEx终极指南:免费开源的内存逆向分析神器
  • 物联网平台前端技术重构:从技术困境到用户体验的完美蜕变
  • 动态资源池化技术:让高价值软件许可“流动”起来的关键策略
  • 24、网络服务中的 SSH 与代理服务器使用指南
  • 2025护网蓝队面试题库,参加护网看这个就够了!
  • 3步精通FLAN-T5 XL:从零到多语言AI实战指南
  • Kubernetes环境下Hadoop存储配置的7个关键问题及解决方案
  • Moonlight安卓串流:5分钟实现手机玩PC游戏的终极指南
  • 40、Postfix性能测试、故障排查及相关标准参考
  • 41、邮件服务器配置与优化全解析