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

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

神经网络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(提前停止)
    当验证集的损失开始上升,或者训练误差变得很小时,停止进一步的反向传播训练,避免模型继续在训练数据上过拟合。

相关文章:

  • SpringBoot配置文件加载优先级
  • 最大公约数(GCD)和最小公倍数(LCM)专题练习 ——基于罗勇军老师的《蓝桥杯算法入门C/C++》
  • 蓝桥杯2023年第十四届省赛真题-接龙数列
  • Linux后门程序工作原理的详细解释,以及相应的防御措施
  • c语言数据结构 双循环链表设计(完整代码)
  • Ubuntu版免翻墙搭建BatteryHistorian
  • freeswitch(开启抓包信息)
  • 观察RenderDoc截帧UE时“Event”代表什么
  • ssh 多重验证的好处:降低密钥长度,动态密码
  • 分布式任务调度
  • 事件响应计划:网络弹性的关键
  • C++ :try 语句块和异常处理
  • IDEA批量替换项目下所有文件中的特定内容
  • Python Cookbook-4.7 在行列表中完成对列的删除和排序
  • 主流加固方案深度剖析(梆梆/腾讯/阿里)
  • 《数据库原理教程》—— 第三章 关系数据模型 笔记
  • 解释 RESTful API,以及如何使用它构建 web 应用程序
  • Linux驱动开发实战(七):pinctrl引脚管理入门结合数据手册分析
  • Powershell WSL导出导入ubuntu22.04.5子系统
  • 1.5.5 掌握Scala内建控制结构 - 异常处理
  • 美F-35险被胡塞武装击中,损失增大让行动成“烂尾仗”
  • 通用汽车回应进口车业务调整传闻:因经济形势变化重组,致力于在中国持续发展
  • 现场丨在胡适施蛰存等手札与文献间,再看百年光华
  • 由我国牵头制定,适老化数字经济国际标准发布
  • 陕西省安康市汉阴县县长陈永乐已任汉阴县委书记
  • Manus向全球用户开放注册