【NLP】 11. 神经网络,线性模型,非线性模型,激活函数,感知器优化,正则化学习方法

发布于:2025-03-18 ⋅ 阅读:(15) ⋅ 点赞:(0)

神经网络Neural Network

线性模型

f ( x ) = x ∗ W f(x) = x * W f(x)=xW

score = features * weights

非线性模型

Deep Learning: How do deep neural networks work? » Lamarr-Blog

Deep Learning: How do deep neural networks work? » Lamarr-Blog](https://lamarr-institute.org/wp-content/uploads/deepLearn_2_EN.png

hidden_units_scores = g(features * weights1) weights2

input x 就是features x1,x2到scores的时候经过第一层权重(weights 1st layer), 这时候x和weights相乘得到了一个分数scores。 接着score进入激活函数,也就是公式之中的g(),激活函数的选择有多种,下面会介绍。scores进入激活函数之后得到g(score)的结果,将其传播至隐藏层(如果网络只有2层,那么就传播到输出层),传播过程中又有一个权重,也就是weights2。

激活函数

1. sigmoid

s i g m o i d ( x ) = 1 1 + e − x sigmoid(x) = \frac{1}{1 + e^{-x}} sigmoid(x)=1+ex1

导数(梯度计算)

Sigmoid 的导数公式:

σ ′ ( x ) = σ ( x ) ( 1 − σ ( x ) ) \sigma'(x) = \sigma(x) (1 - \sigma(x)) σ(x)=σ(x)(1σ(x))

这个导数的特点:

  • 当 x 远离 0(即 x≫0 或 x≪0)时,梯度趋近于 0,容易导致梯度消失问题。
  • 当 x=0 时,梯度最大,约为0.25。

其中:

Derivative of the Sigmoid function | by Arc | TDS Archive | Medium

Derivative of the Sigmoid function | by Arc | TDS Archive | Medium](https://miro.medium.com/v2/resize:fit:1400/1*6A3A_rt4YmumHusvTvVTxw.png)

2. tanh

t a n h ( x ) = e x − e − x e x + e − x tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} tanh(x)=ex+exexex

性质

  • 输出范围是 (−1,1)(相比 Sigmoid(输出范围 (0,1)),Tanh 居中于 0,因此更适合用作隐藏层激活函数。
  • 当 x→+∞x,tanh⁡(x)→1
  • 当 x→−∞,tanh⁡(x)→−1

导数

t a n h ′ ( x ) = 1 − tanh ⁡ 2 ( x ) tanh'(x) = 1 - \tanh^2(x) tanh(x)=1tanh2(x)

  • 在 x=0 处,梯度最大,为 1。
  • 当 x 远离 0(绝对值变大)时,梯度趋近于 0,可能会导致梯度消失问题。

在这里插入图片描述

What is the derivative of f’(X) =tanh? - Quora](https://qph.cf2.quoracdn.net/main-qimg-f1baf29cfdb09202b18e2179f4f41bfc)

Relu

ReLU ( x ) = max ⁡ ( 0 , x ) \text{ReLU}(x) = \max(0, x) ReLU(x)=max(0,x)

性质

  • 当 x>0时,ReLU(x)=x(线性)。
  • 当 x≤0, ReLU(x)=0(恒为 0)。
  • 计算简单,适用于深度神经网络。

导数(梯度计算)

ReLU ′ ( x ) = { 1 , x > 0 0 , x < 0 \text{ReLU}'(x) = \begin{cases} 1, & x > 0 \\ 0, & x < 0 \end{cases} ReLU(x)={1,0,x>0x<0

  • 问题:x=0 处的导数?
    严格来说,ReLU 在 x=0 处不可导,常用的方式是取 x=0 处的导数为 1 或 0(一般取 1 方便计算)。

优缺点

优点:

  • 计算效率高(只需取最大值)。
  • 解决了 Sigmoid/Tanh 的梯度消失问题(只解决了正数部分的梯度消失问题,正数部分梯度恒为 1)。
  • 具有稀疏激活特性,使部分神经元输出 0,有利于减少计算量。

缺点:

  • 死亡 ReLU(Dead ReLU):如果大量神经元的输入 x≤0,梯度为 0,无法更新权重,可能导致神经元永远失活(尤其是大学习率时)。
  • 改进版本
    • Leaky ReLU:给 x≤0 处加一个小斜率(如 0.01),公式: Leaky ReLU(x)=max⁡(0.01x,x)
    • Parametric ReLU (PReLU):斜率可学习: PReLU(x)=max⁡(αx,x)

在这里插入图片描述

ReLU activation function and its derivative | Download Scientific Diagram](https://www.researchgate.net/publication/359884439/figure/fig3/AS:1147051651932161@1650489833478/ReLU-activation-function-and-its-derivative.png)

模型优化:梯度下降流程与损失函数介绍

梯度下降与损失函数优化概述

1. 什么是损失函数(Loss Function)?

损失函数是一个数学函数,用来衡量模型的预测值与真实值之间的误差。损失函数越小,说明模型的预测越准确。

常见的损失函数包括:

  • 均方误差(MSE, Mean Squared Error):
    MSE = 1 n ∑ ( y true − y pred ) 2 \text{MSE} = \frac{1}{n} \sum (y_{\text{true}} - y_{\text{pred}})^2 MSE=n1(ytrueypred)2

  • 交叉熵损失(Cross-Entropy Loss):
    Cross-Entropy = − ∑ y true log ⁡ ( y pred ) \text{Cross-Entropy} = - \sum y_{\text{true}} \log(y_{\text{pred}}) Cross-Entropy=ytruelog(ypred)

2. 什么是导数?

导数表示函数的变化率,也就是函数在某一点的斜率。

  • 若函数的导数为正,表示函数在该点是上升趋势。
  • 若函数的导数为负,表示函数在该点是下降趋势。
  • 若导数为 0,表示函数在该点可能是极值点(最小值或最大值)。

3. 梯度下降的核心思想

梯度下降(Gradient Descent)是一种优化算法,用于最小化损失函数。

  • 梯度(Gradient): 代表损失函数相对于参数的导数,即参数变化时损失的变化率。

  • 下降(Descent): 为了减少损失,我们需要沿着梯度的负方向更新参数。

4. 负梯度下降(Gradient Descent)

因为导数表示的是增加函数的方向,所以我们要朝着负梯度方向移动,让 Loss 变小:
w new = w old − η d L d w w_{\text{new}} = w_{\text{old}} - \eta \frac{dL}{dw} wnew=woldηdwdL
其中:

  • wold 是当前参数

  • η(学习率)控制更新步长

  • d L d w \frac{dL}{dw} dwdL
    是损失函数对参数的导数

非线性解决XOR问题

在这里插入图片描述

XOR gate using 2:1 MUX | VLSI Design Interview Questions With Answers - Ebook](https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSfxjqx6oHBQvQ14y9uaQyHptTYdFqOaylpqdJjMjdhzpWN6G2S09cYVFgqmaLwteRM3yQ&usqp=CAU)

ReLU(x1+ x2) - 2 (ReLU(x1 + x2 - 1) 解决XOR问题

point(0,0) : output = 0 - 0 = 0 -> 类别A

point (1, 0) : output = 1 - 0 = 1 -> 类别B

point (0, 1) : output = 1 - 0 = 1 -> 类别B

point (1, 1) : output = 2 - 2 = 0 -> 类别A

正则化学习方法

  1. 修改损失函数,引入惩罚项(例如L1、L2正则化)
    在损失函数中加入额外的惩罚项,用于控制模型复杂度,防止过拟合。L1正则化会使一些权重变为零,L2正则化会使权重尽量小。
  2. Dropout(丢弃法)
    在训练过程中,随机地将一些神经网络的权重设为零,减少模型对某些神经元的依赖,提高模型的泛化能力。通过这种方式,网络可以学到更为鲁棒的特征表示。
  3. Early Stopping(提前停止)
    当验证集的损失开始上升,或者训练误差变得很小时,停止进一步的反向传播训练,避免模型继续在训练数据上过拟合。