神经网络Neural Network
线性模型
f ( x ) = x ∗ W f(x) = x * W f(x)=x∗W
score = features * weights
非线性模型
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+e−x1
导数(梯度计算)
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](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+e−xex−e−x
性质
- 输出范围是 (−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)=1−tanh2(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∑(ytrue−ypred)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
正则化学习方法
- 修改损失函数,引入惩罚项(例如L1、L2正则化):
在损失函数中加入额外的惩罚项,用于控制模型复杂度,防止过拟合。L1正则化会使一些权重变为零,L2正则化会使权重尽量小。 - Dropout(丢弃法):
在训练过程中,随机地将一些神经网络的权重设为零,减少模型对某些神经元的依赖,提高模型的泛化能力。通过这种方式,网络可以学到更为鲁棒的特征表示。 - Early Stopping(提前停止):
当验证集的损失开始上升,或者训练误差变得很小时,停止进一步的反向传播训练,避免模型继续在训练数据上过拟合。