【全连接神经网络】整体架构与激活函数

整体架构

全连接神经网络整体架构

输入层、隐藏层和输出层

  • 输入层:用于接收原始数据,例如图像
  • 隐藏层
    • 卷积层(Convolutional Layer):通过卷积操作提取特征
    • 激活层(Activation Layer):通常使用ReLU等激活函数,引入非线性
    • 池化层(Pooling Layer):进行降维,减少计算量,同时保留重要特征
    • 全连接层(Fully Connected Layer):将前面的特征整合起来,用于分类或回归
  • 输出层:输出最终的结果

全连接神经网络单元结构

单元到整体

全连接神经网络结构上分析是从单元(多个Model)搭建成一个完整的整体,希望找到一组最优的w和b,从而使得模型最优

神经元公式 a = h(w*x +b)理解

各个符号含义

  • x:输入信号,通常是上一层神经元的输出或者原始数据
  • w:权重(weight),表示输入信号与神经元输出之间的关系,决定了输入信号对输出的影响程度。每个输入都有对应的权重
  • b:偏置(bias),帮助神经元更灵活地进行调整,通常用于调整输出值的基准点,不依赖于输入信号
  • w⋅x:输入信号和权重的加权和,也称为加权和或总输入
  • w⋅x+b:加权和再加上偏置,得到神经元的总输入
  • h:激活函数(activation function),对神经元的总输入进行非线性变换。常见的激活函数有ReLU(Rectified Linear Unit)、sigmoid、tanh等
  • a:神经元的输出(也叫激活值)。这是通过激活函数 hhh 对加权和 w⋅x+bw \cdot x + bw⋅x+b 进行非线性映射后的结果

煎荷包蛋理解神经元公式

  • 鸡蛋(x1x_1x1​),牛奶(x2x_2x2​),和盐(x3x_3x3​),这些食材将被混合成一个鸡蛋液。这些食材就类似神经元的输入信号 x1,x2,x3x_1, x_2, x_3x1​,x2​,x3​
  • 权重:其中的权重调整就类似于每种食材放了多少数量
  • 加权和
    • 假设鸡蛋 2 个(x1=2x_1 = 2x1​=2)乘以它的权重 2(w1=2w_1 = 2w1​=2),得到 4
    • 牛奶 1 杯(x2=1x_2 = 1x2​=1)乘以它的权重 1(w2=1w_2 = 1w2​=1),得到 1
    • 盐 0.5 克(x3=0.5x_3 = 0.5x3​=0.5)乘以它的权重 0.5(w3=0.5w_3 = 0.5w3​=0.5),得到 0.25
    • 4+1+0.25=5.25
  • 调整口味(偏置b)
    • 煎蛋的过程中加点糖混合一下口味,例如糖表示1,那么此时的加权和就是6.25
  • 把握火候细调口味(对应激活函数h)
    • 激活函数(hhh)就像是你最终决定煎蛋的火候。你希望鸡蛋液最终有一个合适的口感,过熟或者过生都不好。假设你使用了一个简单的激活函数,比如“阈值函数”:如果结果超过 6,则将其设置为 1(表示煎蛋成功),否则设为 0(表示失败),此处6.25大于6,所以激活函数输出的就是1
  • 结果:输出1,代表煎鸡蛋成功

激活函数

引入激活函数的原因

  • 引入非线性,使神经网络能够处理复杂的任务
  • 增强神经网络的表达能力,允许网络近似任何函数
  • 使每一层神经元在学习过程中能够捕捉到不同层次的特征,从而处理更复杂的问题

线性与非线性

 线性关系理解

例如去便利店买东西,销售价格和数量的关系是线性的,一件商品的单价是10元,那么最终的价格只需要使用数量乘上10就可以y=10⋅x

非线性关系理解

便利店搞水果促销活动,买二送一,那么最终的总结就不是数量与单价的乘积

  • 如果你买 2 个水果,总价是 10 + 10 = 20 元
  • 如果你买 3 个水果,商店送你 1 个水果,总价是 20 元(实际上你只付了 2 个的价格)
  • 如果你买 4 个水果,总价是 30 元(实际上你只付了 3 个的价格)

非线性关系与图像识别

非线性关系简单来说就是输入与输出不成比例关系,无法用一个简单的直线方程来描述

假设你想让神经网络识别图片中的猫或狗。如果没有非线性,网络就只能通过线性方式处理像素数据,比如直接将每个像素的亮度与权重相乘,再加上偏置。但是,猫和狗的图片非常复杂,包含了多种形状、颜色、纹理等,无法用简单的线性关系描述

为了能够从图片中提取复杂的特征(如猫的耳朵、尾巴,狗的鼻子、眼睛等),神经网络需要引入非线性,以便可以组合不同层的特征,逐步从低级的特征(边缘、角落)到高级的特征(完整的动物形状)

如果每一层的操作都是线性的,即使堆叠了很多层,网络最终仍然只能进行线性映射,无法区分复杂的猫狗图片。而通过激活函数(如 ReLU、sigmoid 等),我们引入了非线性,使得网络能够学习到复杂的图像特征,从而提高识别能力

上述的即是图像识别中激活函数存在的意义

Sigmoid

基本了解

S型曲线函数,常用于将输入值压缩到0到1之间

函数性质

  • 范围:σ(x)的输出值在0和1之间
  • 平滑性:Sigmoid 函数是光滑且可微的,这对神经网络的反向传播算法非常重要
  • 单调性:函数是严格递增的
  • 对称性:关于点 (0,0.5)对称
  • 导数:Sigmoid 函数的导数可以简化为自身的函数形式

 智能调整红绿灯理解该函数

 Sigmoid 函数可以帮助将实时的交通流量数据(如车辆数量)转换为绿灯持续时间的概率性决策

首先输入数据:也就是输入的x表示当前道路上的车辆数量

sigmoid映射

  • 当车辆数量较少(xxx 较小)时,σ(x)\sigma(x)σ(x) 的值接近0,表示绿灯时间较短
  • 当车辆数量适中时,σ(x)\sigma(x)σ(x) 的值逐渐增加,绿灯时间适中
  • 当车辆数量很多(xxx 较大)时,σ(x)\sigma(x)σ(x) 的值接近1,表示绿灯时间较长

决策

  • 低流量:减少等待时间,提高通行效率
  • 高流量:延长绿灯时间,缓解交通拥堵

导数与反向传播

通过一个学习自行车的事例理解这里的概念

  • sigmoid的导数决定神经网络再反向传播时候的调整幅度,也就是自己失败后不断的调整自己方向
  • 梯度消失导致调整幅度变小,那么在训练深层网络的时候就会导致问问题

损失函数

学习自行车的时候,会经历很多次失败,每次失败自己都会得到一个反馈例如车速快、骑行不稳等。这些反馈信息就相当于网络中的损失函数,它告诉你哪里做得好,哪里做得不好。你会根据这些反馈调整自己的动作,逐渐掌握骑车技巧

反向传播与调整

现在假设你摔了车(这代表你的网络输出错误)。你会反思摔倒的原因,也许是因为你加速得太快,或者方向掌握不好。你根据这些反馈开始调整自己的动作:减缓速度,或者调整把握方向。这个调整的过程就像是神经网络中的反向传播,通过误差来调整之前的参数(在这里是你的骑车技巧)

Sigmoid 函数与其导数

假设你学习骑车的过程是一个逐渐平滑的过程。你刚开始可能不太会平衡,但随着反馈,你会逐渐改进,达到一个比较稳定的状态。而这个“平稳”的过程,可以用 Sigmoid 函数来描述。在神经网络中,Sigmoid 函数也能平滑地映射输入(你的骑车行为)到输出(你是否成功)

而sigmoid的导数就是自己骑行时候的敏感度,如果已经接近于骑行平稳的状态,那么调整幅度就很小。此时也就接近于正确答案,此时导数也比较小。反之骑行不稳定,导数比较大,调整的幅度也会变大

反向传播中的梯度计算

就像你在骑自行车时,会不断根据摔倒或稳定的反馈来调整动作,在神经网络的反向传播过程中,网络也会根据输出误差来调整权重

针对于sigmoid函数来说,其导数公式可以通过输出值(例如骑行的稳定程度)来有效计算误差的“影响力”,然后再调整权重

  • 如果你的骑行非常平稳(即 Sigmoid 输出接近 1),你就不需要做很大的调整(梯度接近 0)
  • 如果你骑得不稳定(即 Sigmoid 输出接近 0),你就需要大幅度调整

sigmoid函数特点与使用场景

sigmoid函数输出为概率

Sigmoid 函数将输入映射到 0 到 1 之间,其主要特点就是输出值的范围有限,并且具有平滑的性质。这使得它非常适合用于 概率输出,特别是在二分类问题中

可以将其理解成天气预报系统,也就是根据现实中的具体的因素,判断明天是否会下雨,然后设置一个阈值如果超过0.5那么就是会下雨,反之则不会下雨。神经网络中,sigmoid函数则常用于输出层。

sigmoid函数平滑性

Sigmoid 函数的曲线是平滑的,意味着它在不同输入下的变化是连续的,而不是突然的。这种特性非常重要,因为在神经网络中,我们希望通过微小的调整来改善模型,而不是让输出出现突变或不稳定的波动

生活中我们在调节水温的时候,如果只可以调节凉水和开水,那么必定会引起不适。同样在sigmoid函数中一样,梯度也就是权重的调整量不会出现突变,训练的过程就会更加稳定,从而避免过大更新和不稳定的学习过程

梯度消失(重点)

如果你一直骑得很稳,或者如果神经网络的输出已经接近 0 或 1,调整的幅度就会变小,这就是梯度消失的问题

就像你骑车已经很熟练,可能几乎不会摔倒,所以即使你再做些微调,变化也很小。对于神经网络,这会导致反向传播过程中“误差”难以传递回前面的层,进而影响到网络的学习效率

Tanh

基本了解

输出范围为 -1 <= f(x) <= 1

优点

  • 输出范围有限:Tanh的输出在-1和1之间,因此比Sigmoid函数(0到1)有更广泛的输出范围。这使得Tanh函数能更好地将输入的激活值分布到更大的范围,从而更有效地对输入进行映射
  • 中心对称:Tanh函数关于原点对称,这意味着它的输出不仅可以是正值,也可以是负值,这对于某些问题(例如,处理正负数据时)非常有用。它的输出为负数时,能够带来负的反馈,而不是像Sigmoid那样只给出正反馈
  • 非线性:Tanh是一个非线性函数,这使得它能够为神经网络提供非线性建模的能力,帮助网络学到复杂的特征

缺点

  • 梯度消失问题:尽管Tanh比Sigmoid函数的输出范围更大,但它也容易发生梯度消失问题,尤其是在输入非常大或非常小的时候。当输入的值远离0时,Tanh函数的导数会接近于零,这会导致反向传播时梯度变得非常小,网络参数更新变得缓慢,甚至停止更新。这会导致训练变得非常困难,特别是在深度神经网络中
  • 计算复杂度较高:与ReLU相比,Tanh函数的计算复杂度较高,因为它需要指数运算。对于大规模神经网络训练时,计算效率不如ReLU

ReLU(Rectified Linear Unit)

基本了解 

函数与导数

优点

  • 简单高效:ReLU只需要执行一个简单的比较运算,因此计算非常高效,适合大型神经网络
  • 非线性:尽管看起来像是线性函数,但它的非零部分的导数是常数“1”,从而赋予神经网络非线性建模能力
  • 梯度消失问题减少:相比于Sigmoid或Tanh激活函数,ReLU能有效避免梯度消失问题,因为它在正区间的梯度始终为1
  • 稀疏性:当输入为负时,ReLU的输出为0,这会使得一些神经元在训练过程中被“激活”(输出非零),从而引入稀疏性,提高模型的表达能力

缺点

  • 死亡ReLU 问题:当输入的值总是负值时,ReLU的梯度为0,可能导致神经元在训练过程中永远无法被激活,从而无法更新其参数
    • 可以使用变种激活函数,如Leaky ReLUParametric ReLU
  • 输出范围无限:对于正值输入,输出可以变得很大,这可能导致梯度爆炸问题,但这通常可以通过适当的权重初始化和正则化来缓解

梯度消失问题减少

梯度消失就是在训练深层神经网络的时候,伴随着反向传播过程中梯度的传递,梯度的数值会越来越小,最终在靠近输入层的地方,梯度几乎消失,导致这些层的权重几乎不更新,从而使得整个网络难以学习到有效的特征

在Sigmoid和Tanh激活函数中,输入较大或较小时,梯度趋近于零。尤其是Tanh和Sigmoid的导数在极端输入(大正数或小负数)时非常小,导致梯度传播时被逐渐缩小,最终导致前面层的权重更新非常缓慢甚至停止更新

ReLU的优势在于其导数在正区间是常数(1),所以当输入为正值时,梯度不会消失,这大大缓解了梯度消失问题

  • 例如如果神经元的输入大于0,那么梯度就是1,梯度可以有效传播到上一层
  • 如果输入小于0,那么ReLu的梯度为0,此时就不会传递,所以针对于负数,还是存在梯度消失问题,所以其优点只是减少了梯度消失而不是彻底消灭

加深理解

就像一个工厂生产线,工人(神经元)正在进行工作。工人如果得不到足够的指示或工作材料(负数输入),就无法做任何工作(梯度为0)。但是,当工人收到明确的工作指示(正输入),他们会积极执行任务(梯度为1),这时整个工厂的生产效率能够得到提高。虽然工人有时没有工作,但当他们有工作时,他们会高效地完成任务(ReLU在正区间梯度为1)

稀疏性

该函数中的稀疏性表示的是神经网络中,ReLU激活函数会使得部分神经元的输出为零。这种情况发生在输入为负数时,ReLU的输出就是0

稀疏性可以有效提高模型的效率,因为很多神经元的输出为零,这减少了计算量和内存的使用

稀疏性还可以促进特征的选择,神经元输出为零意味着它们不会参与后续计算,从而有效地屏蔽掉一些不重要或不相关的特征,这可以增强网络的泛化能力

稀疏性就像排除哪些系统中不活跃的用户,只保留其活跃的用户

输出范围无限

理解

就像一个水管系统。水管的出口(输出)没有限制,水流的量(输出值)可以不断增加。当水流量过大时,水管就会出现压力过高的情况,最终可能会导致水管破裂(梯度爆炸)。为了避免这种情况,通常需要安装阀门来控制水流量(权重正则化、梯度裁剪等)

分析

ReLU函数的输出为max(0, x),这意味着对于正输入,输出可以非常大,理论上没有上限。当输入值越大时,输出也随之增大,导致输出范围无限大

因为输出范围无限的问题,所以导致梯度爆炸。如果网络中的激活值变得非常大(尤其在深度网络中,逐层传播),那么梯度也可能随之增大,最终导致梯度爆炸。梯度爆炸会导致权重更新过大,甚至导致训练过程不稳定,模型的性能下降

Leaky ReLU

基本了解

该激活函数与ReLu的主要区别在于ReLU在出现负输入的时候会出现脑死亡,但是该激活函数可以在输入负数的时候有一个小梯度,从而避免脑死亡

  • α 是一个小的常数(通常为0.01),它控制在负区间的斜率
  • 当输入 x 为正时,Leaky ReLU 输出与输入相同(与标准 ReLU 相同)
  • 当输入 x 为负时,Leaky ReLU 输出为 αx\alpha xαx,即输入的负值被缩小,依然有一个小的负输出

该激活函数在ReLU的负输入区域上引入一个微小的负斜率,从而缓解传统ReLU激活函数的死亡神经元问题

优点

  • 缓解死亡神经元问题
    • 标准的 ReLU 函数在输入小于0时会输出0,从而使得梯度无法传播(梯度为0),导致神经元永远无法更新,这称为“死亡神经元”问题。Leaky ReLU 通过引入一个小的负斜率(通常为0.01),使得负值输入时也能有非零的梯度,神经元不至于“死掉”,从而避免了这个问题
  • 非零输出的负值
    • 在 ReLU 中,所有负值输入都被抑制为0,这对于一些问题可能不太合适。而 Leaky ReLU 则允许负输入在负区间有一个较小的输出,从而可以保留负反馈
  • 避免过大梯度
    • Leaky ReLU 通过限制负输入的斜率(α\alphaα通常很小,默认值为0.01),避免了反向传播时负梯度过大的问题

缺点

  • 需要选择合适的斜率 α
    • 选择过大的 α\alphaα 会导致负输入区域的斜率过大,从而可能影响训练的稳定性。选择过小的 α\alphaα 则可能无法有效解决“死亡神经元”问题
  • 仍然存在稀疏性
    • 尽管 Leaky ReLU 解决了负输入为0的情况,但它依然会产生稀疏性——即仍然会有一些神经元的输出接近于0,导致网络的稀疏性特征

对比

  • ReLU:适用于许多任务,但会遇到“死亡神经元”问题,尤其是在深度网络中
  • Sigmoid/Tanh:虽然能够处理负值,但容易发生梯度消失,且输出范围有限(Sigmoid: [0,1],Tanh: [-1,1]),不适用于某些深度学习任务
  • Leaky ReLU:通过适度的负区间斜率,避免了死亡神经元问题,且保持了非线性特性,是许多深度学习任务中的理想选择

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值