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

深入浅出神经网络:从基础原理到高级应用

第5章 神经网络

更加详细内容可以看这篇文章

5.1 神经元模型

神经网络的基本单元是神经元模型。神经元模拟了生物神经元的行为,通过接收输入信号,进行加权求和,然后经过激活函数输出结果。
在这里插入图片描述

数学上,一个简单的神经元可以表示为:

y = f ( ∑ i = 1 n w i x i + b ) y = f\left(\sum_{i=1}^{n} w_i x_i + b\right) y=f(i=1nwixi+b)

其中, w i w_i wi是输入 x i x_i xi的权重, b b b是偏置, f f f是激活函数。
在这里插入图片描述

常见的激活函数包括Sigmoid函数、Tanh函数和ReLU函数,它们分别定义为:

Sigmoid ( x ) = 1 1 + e − x \text{Sigmoid}(x) = \frac{1}{1 + e^{-x}} Sigmoid(x)=1+ex1

Tanh ( x ) = tanh ⁡ ( x ) = e x − e − x e x + e − x \text{Tanh}(x) = \tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} Tanh(x)=tanh(x)=ex+exexex

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

这些激活函数各有特点,Sigmoid和Tanh函数压缩输入到固定范围内,但容易导致梯度消失问题;ReLU函数则通过简单的线性变换解决了梯度消失问题,但可能导致“死ReLU”现象。

5.2 感知机与多层网络

感知机是最简单的神经网络,由一个或多个神经元构成,它只能解决线性可分的问题。
感知机:两层神经元组成。
在这里插入图片描述

感知机的输出可以表示为:

y = sign ( ∑ i = 1 n w i x i + b ) y = \text{sign}\left(\sum_{i=1}^{n} w_i x_i + b\right) y=sign(i=1nwixi+b)

感知机的局限在于它仅能解决线性可分的问题。为了解决非线性问题,我们引入了多层感知机(MLP)。多层感知机通过引入隐藏层解决了非线性问题。一个两层感知机有输入层、隐藏层和输出层。其数学表示为:

h j = f ( ∑ i = 1 n w i j x i + b j ) h_j = f\left(\sum_{i=1}^{n} w_{ij} x_i + b_j\right) hj=f(i=1nwijxi+bj)

y k = g ( ∑ j = 1 m v j k h j + c k ) y_k = g\left(\sum_{j=1}^{m} v_{jk} h_j + c_k\right) yk=g(j=1mvjkhj+ck)

其中, w i j w_{ij} wij v j k v_{jk} vjk分别是输入层到隐藏层和隐藏层到输出层的权重, b j b_j bj c k c_k ck是偏置项, f f f g g g是激活函数。多层感知机的强大在于其能够通过多个隐藏层的组合,逼近任意复杂的函数。

5.3 误差逆传播算法

误差逆传播算法是训练多层神经网络的核心算法。其目标是通过最小化损失函数来调整网络的权重和偏置。常见的损失函数是均方误差(MSE),定义为:

E = 1 2 ∑ k = 1 K ( y k − t k ) 2 E = \frac{1}{2}\sum_{k=1}^{K} (y_k - t_k)^2 E=21k=1K(yktk)2

其中, y k y_k yk是网络的输出, t k t_k tk是目标值。反向传播通过链式求导法则计算损失函数相对于每个权重的梯度,然后使用梯度下降法更新权重:

w i j : = w i j − η ∂ E ∂ w i j w_{ij} := w_{ij} - \eta \frac{\partial E}{\partial w_{ij}} wij:=wijηwijE

其中, η \eta η是学习率。

详细来说,反向传播算法分为以下几个步骤:

  1. 前向传播:计算每层神经元的输入和输出。
  2. 计算误差:使用损失函数计算输出层的误差。
  3. 反向传播:根据输出层的误差,利用链式求导法则逐层计算每层的误差。
  4. 更新权重:根据计算出的误差和梯度,调整每个权重和偏置。

梯度计算的关键在于链式法则。对于隐藏层的每个权重 w i j w_{ij} wij,其梯度可以表示为:

∂ E ∂ w i j = ∂ E ∂ y k ⋅ ∂ y k ∂ h j ⋅ ∂ h j ∂ w i j \frac{\partial E}{\partial w_{ij}} = \frac{\partial E}{\partial y_k} \cdot \frac{\partial y_k}{\partial h_j} \cdot \frac{\partial h_j}{\partial w_{ij}} wijE=ykEhjykwijhj

通过这种方式,网络能够逐层调整权重,使得损失函数逐渐减小,逼近最优解。

当然,继续补全和详细解释剩下的部分。

5.4 全局最小与局部极小

在训练神经网络的过程中,我们希望找到损失函数的全局最小值,但由于损失函数通常是非凸的,我们可能会陷入局部极小值。解决这一问题的方法包括初始化权重的多次尝试、使用动量(Momentum)方法、以及更复杂的优化算法如Adam优化器。

局部最小值是在某一区域内,函数的取值达到了最小,但是如果将这个区域扩展到定义域上来,那么这个局部最小值就不一定是最小的。

全局最小值,是在定义域内,函数值最小。全局最小一定是局部最小值,但“局部极小 ” 不一定是“全局最小 ”。因此我们的目标是找到 “ 全局最小 ”。

可能存在多个局部极小值,但却只会有一个全局最小值

在这里插入图片描述

动量方法通过引入动量项来加速梯度下降,并减少震荡,其更新规则为:

v t + 1 = γ v t + η ∂ E ∂ w i j v_{t+1} = \gamma v_t + \eta \frac{\partial E}{\partial w_{ij}} vt+1=γvt+ηwijE
w i j : = w i j − v t + 1 w_{ij} := w_{ij} - v_{t+1} wij:=wijvt+1

其中, γ \gamma γ是动量系数,通常设为0.9。动量方法通过保留先前梯度更新的方向,使得参数在正确方向上前进得更快。

Adam优化器结合了动量法和RMSProp方法,通过自适应调整学习率,加速收敛并降低震荡。其更新规则为:

m t = β 1 m t − 1 + ( 1 − β 1 ) ∇ E m_t = \beta_1 m_{t-1} + (1 - \beta_1) \nabla E mt=β1mt1+(1β1)E
v t = β 2 v t − 1 + ( 1 − β 2 ) ( ∇ E ) 2 v_t = \beta_2 v_{t-1} + (1 - \beta_2) (\nabla E)^2 vt=β2vt1+(1β2)(E)2
m ^ t = m t 1 − β 1 t \hat{m}_t = \frac{m_t}{1 - \beta_1^t} m^t=1β1tmt
v ^ t = v t 1 − β 2 t \hat{v}_t = \frac{v_t}{1 - \beta_2^t} v^t=1β2tvt
w = w − η m ^ t v ^ t + ϵ w = w - \eta \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon} w=wηv^t +ϵm^t

其中, β 1 \beta_1 β1 β 2 \beta_2 β2是超参数,常设为0.9和0.999, ϵ \epsilon ϵ是一个极小值防止分母为零。

5.5 其他常见神经网络

除了多层感知机,还有许多其他类型的神经网络。

  1. 卷积神经网络(CNN)
    卷积神经网络专注于处理图像数据,通过卷积层提取特征。卷积操作可以表示为:

    ( I ∗ K ) ( x , y ) = ∑ i = 0 m − 1 ∑ j = 0 n − 1 I ( x + i , y + j ) K ( i , j ) (I * K)(x, y) = \sum_{i=0}^{m-1}\sum_{j=0}^{n-1} I(x+i, y+j) K(i, j) (IK)(x,y)=i=0m1j=0n1I(x+i,y+j)K(i,j)

    其中, I I I是输入图像, K K K是卷积核。卷积层通过滑动窗口操作提取局部特征,并通过池化层(如最大池化)进一步减少特征图的尺寸。典型的CNN架构包括卷积层、池化层、全连接层等。

  2. 循环神经网络(RNN)
    循环神经网络用于处理序列数据,通过隐藏层之间的循环连接捕捉时间序列关系。其更新公式为:

    h t = f ( W h h h t − 1 + W x h x t + b h ) h_t = f(W_{hh} h_{t-1} + W_{xh} x_t + b_h) ht=f(Whhht1+Wxhxt+bh)
    y t = g ( W h y h t + b y ) y_t = g(W_{hy} h_t + b_y) yt=g(Whyht+by)

    其中, W h h W_{hh} Whh, W x h W_{xh} Wxh, W h y W_{hy} Why是权重矩阵, h t h_t ht是隐藏状态, x t x_t xt是输入, y t y_t yt是输出。RNN在处理长序列时可能会遇到梯度消失或爆炸问题,常用的变种有长短期记忆网络(LSTM)和门控循环单元(GRU),它们通过引入门机制有效地缓解了这些问题。

  3. 生成对抗网络(GAN)
    生成对抗网络由生成器和判别器组成。生成器通过噪声生成假数据,判别器则用于区分真实数据和假数据。训练过程是一个零和博弈,两个网络互相竞争,使得生成器生成的数据越来越真实。GAN的损失函数为:

    min ⁡ G max ⁡ D V ( D , G ) = E x ∼ p d a t a ( x ) [ log ⁡ D ( x ) ] + E z ∼ p z ( z ) [ log ⁡ ( 1 − D ( G ( z ) ) ) ] \min_G \max_D V(D, G) = \mathbb{E}_{x \sim p_{data}(x)}[\log D(x)] + \mathbb{E}_{z \sim p_z(z)}[\log(1 - D(G(z)))] GminDmaxV(D,G)=Expdata(x)[logD(x)]+Ezpz(z)[log(1D(G(z)))]

    其中, D D D是判别器, G G G是生成器, x x x是真实数据, z z z是噪声。

  4. 自编码器(Autoencoder)
    自编码器用于数据降维和特征学习,由编码器和解码器组成。编码器将输入数据压缩到低维表示,解码器则将低维表示重构为原始数据。自编码器的目标是最小化重构误差:

    L ( x , x ^ ) = ∣ ∣ x − x ^ ∣ ∣ 2 L(x, \hat{x}) = ||x - \hat{x}||^2 L(x,x^)=∣∣xx^2

    其中, x x x是输入数据, x ^ \hat{x} x^是重构数据。常见的变种有稀疏自编码器、去噪自编码器和变分自编码器(VAE)。

总结

神经网络是深度学习的核心,理解其基础构造和训练方法对于掌握现代人工智能技术至关重要。通过以上各章节的详细讲解,我们从神经元模型、感知机、多层网络、误差逆传播算法,到全局最小与局部极小问题,以及不同类型的神经网络,一步步深入了解其原理和应用。希望这些内容能够帮助你更好地理解神经网络的复杂性和强大潜力。


http://www.kler.cn/news/363991.html

相关文章:

  • JS补原型链
  • SQL实战测试
  • 【AscendC算子开发】笔记2 算子高级开发和调试调优
  • vue2-render:vue2项目使用render / 基础使用
  • Linux运维篇-ansible的使用
  • [DB] Database Compression
  • mysql 13 MySQL基于规则的优化
  • 解决ElasticSearch启动成功却无法在浏览器访问问题
  • 解决:git SSL certificate problem: unable to get local issuer certificate
  • 孤岛架构在异构性方面优势
  • 国内 Docker 镜像加速与 GitHub 加速服务:CNPROXY.TOP
  • Spring 设计模式之工厂模式
  • 分类任务中评估模型性能的核心指标
  • HTTP协议解析(http/1、2、3)
  • 【uniapp版即时通讯】IM社交交友聊天语音视频通话双端APP+搭建视频教程
  • 028.爬虫专用浏览器-抓取#shadowRoot(closed)下的内容
  • C#与C++交互开发系列(九):字符串传递的几种形式
  • 执行Django项目的数据库迁移命令时报错:(1050, “Table ‘django_session‘ already exists“);如何破?
  • 【spring cloud】深入探讨 集群,分布式,微服务
  • OpenGL 进阶系列05 - OpenGL 图元重启(primitiverestart)
  • python的散列类型与字符编码
  • 为什么说Tcp是面向字节流的以及(Tcp粘包问题、TCP/UDP对比、listen函数的backlog参数的意义)
  • Kafka高可用性原理深度解析
  • 信息安全工程师(69)数字水印技术与应用
  • k8s-service详解
  • 使用python,自动实现将多个 JPG 文件转换为一个 PDF 文件