什么是激励函数(Activation Functions)

激励函数在深度学习中扮演关键角色,解决非线性问题。常见的如sigmoid和relu,前者将实数压缩至0-1区间,常用于分类概率,后者在卷积层常用。自定义激励函数需确保可微分,以支持误差反向传播。在深层网络中,选择合适的激励函数能避免梯度消失或爆炸问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简而言之,激励函数是为了解决我们日常生活中无法用线性方程所概括的问题

 

将人工神经网络转化为数学模型,可以看作是y=Wx,y是输出值,x是输入值,W就是y到x的一种映射关系(为一个参数)

那么,对于线性问题,W是很容易计算出来的,而且它一般是一个常数值,对于非线性问题,在二维坐标系上,函数图像并不是一条直线,而是一条曲线,此时求出W是一个非常难的问题,所以引入激励函数,令y=AF(Wx),其中,AF()为激励函数,即一些非线性方程(relu、sigmoid、tanh等)

sigmoid,tanh比较常见于全连接层,relu常见于卷积层

比如,sigmoid的函数表达式如下

其中 z 是一个线性组合,比如 z 可以等于:b + w1*x1 + w2*x2

通过代入很大的正数或很小的负数到g(z)函数中可知,其结果趋近于0或1

因此,sigmoid函数g(z)的图形表示如下( 横轴表示定义域,纵轴表示值域 ):

也就是说,sigmoid函数的功能是相当于把一个实数压缩至0到1之间

当z是非常大的正数时,g(z)会趋近于1,而z是非常小的负数时,则g(z)会趋近于0

压缩至0到1有何用处呢?用处是这样一来便可以把激活函数看作一种“分类的概率”,比如激活函数的输出为0.9的话便可以解释为90%的概率为正样本,如此达到分类的目的

激励函数也是可自己创建的,根据实际问题,但是要保证创建的激励函数是可微分的,因为在误差反向传播时,只有这些可微分的激励函数才能将误差传递回去。

在网络层数不多时,可自由选择激励函数;在网络层数较多时,则需要考虑选择哪种激励函数,因为当网络较深时,会涉及到梯度爆炸以及梯度消失的问题

### MobileNetV3的定义与功能 #### 定义 MobileNetV3是由Google在2019年发布的一种高效、轻量级的卷积神经网络模型,专门针对移动设备和嵌入式系统进行了优化[^3]。该模型继承了MobileNet系列的核心设计理念——通过减少计算量和内存占用的同时保持较高的性能,在资源受限环境下表现出色。 其主要特点包括: - **深度可分离卷积**:沿用了MobileNetV1中的核心思想,显著降低了参数数量和计算复杂度。 - **逆残差结构**:借鉴MobileNetV2的设计理念,采用了带有线性瓶颈的逆残差模块,进一步提升了效率。 - **Squeeze-and-Excitation (SE) 结构**:引入了轻量化的注意力机制,增强了模型对重要特征的关注能力。 - **新型激活函数 h-swish**:相比传统的ReLU,h-swish能够提供更好的表达能力和更高的精度[^4]。 #### 功能 MobileNetV3的功能体现在以下几个方面: 1. **高效的特征提取**:通过对硬件感知的网络架构搜索(NAS)以及NetAdapt算法的应用,MobileNetV3能够在不同资源约束下灵活调整模型大小和计算成本,从而实现最佳的精度与速度权衡[^2]。 2. **支持多样化的任务需求**:除了经典的图像分类任务外,MobileNetV3还可以扩展到目标检测、语义分割等领域。例如,论文中提出的Lite Reduced Atrous Spatial Pyramid Pooling(LR-ASPP)是一种专门为语义分割设计的有效解码器[^2]。 3. **适应性强**:提供了两个版本——Large 和 Small,分别适用于高资源和低资源配置下的应用场合。这种双轨制设计满足了更广泛的实际部署需求[^1]。 --- ### MobileNetV3架构介绍 MobileNetV3的整体架构基于一系列精心设计的基础模块构建而成,这些模块共同作用以达到最优效果: 1. **输入处理阶段** 输入图片经过初始的标准卷积操作后进入后续的主要部分。此过程保留了原始分辨率的信息以便更好地捕捉全局上下文关系。 2. **Bottleneck Layers** 这些层构成了整个网络的核心组成部分,每一个都包含了如下几个子组件: - Depthwise Convolution: 对每个通道单独施加标准二维空间滤波器; - Pointwise Convolution: 负责跨信道交互信息传递的任务; - Non-linearity Activation Functions: 使用ReLU或者h-swish作为激励单元来增加非线性特性; 下面是一个典型的bottleneck layer代码示例: ```python class Bottleneck(nn.Module): def __init__(self, inp, oup, stride, expand_ratio, use_se=True, nl='RE'): super(Bottleneck, self).__init__() assert stride in [1, 2] hidden_dim = round(inp * expand_ratio) if nl == 'HS': activation_layer = nn.Hardswish(inplace=True) elif nl == 'RE': activation_layer = nn.ReLU(inplace=True) else: raise NotImplementedError(f"{nl} is not supported") layers = [] if expand_ratio != 1: layers.append(ConvBNActivation(inp, hidden_dim, kernel_size=1)) layers.extend([ # dw ConvBNActivation(hidden_dim, hidden_dim, stride=stride, groups=hidden_dim), # Squeeze-and-Excite SELayer(hidden_dim) if use_se else nn.Identity(), # pw-linear nn.Conv2d(hidden_dim, oup, 1, 1, 0, bias=False), nn.BatchNorm2d(oup), ]) self.conv = nn.Sequential(*layers) self.use_res_connect = all([stride == 1, inp == oup]) def forward(self, x): if self.use_res_connect: return x + self.conv(x) else: return self.conv(x) ``` 3. **最终输出阶段** 在接近末端的位置,会先进行一次较大的降维操作再接上若干简单的全连接层完成预测工作。值得注意的是这里去掉了传统意义上的最后几轮复杂的卷积运算而改用更加简洁的方式代替之[^4]。 --- ### 应用场景 由于具备出色的能效比优势,MobileNetV3非常适合应用于以下领域: - **移动端应用程序开发**:如实时拍照翻译工具、AR/VR体验增强软件等均需依赖快速响应且耗电量少的人工智能引擎驱动运行。 - **物联网(IoT)** 设备集成方案规划实施过程中也常选用此类紧凑型框架作为首选候选对象之一因为它们可以直接嵌套至小型传感器节点内部而不至于造成过多额外负担。 - **边缘计算平台上的机器学习服务供给方同样倾向于采纳类似的技术路线图以期达成更低延迟水平的服务质量承诺同时还能兼顾能耗指标控制方面的考量因素。** ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PL_涵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值