常见激活函数,及其优缺点 - 面试篇

本文深入探讨了激活函数在多层神经网络中的作用,包括sigmoid、tanh、relu、leaky relu、ELU和gelu等常见函数的特性、优缺点,并分析了如何解决梯度消失和爆炸问题。还提到了在面试中可能涉及的相关知识点,如反向传播、优化器和权重初始化方法。

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

废话不多说,直接开问。

问:什么是激活函数?
在多层神经网络中,上层节点的输出和下层节点的输入之间具有一个函数关系,这个函数称为激活函数。

问:激活函数有什么用?
如果没有激励函数,在这种情况下你每一层节点的输入都是上层输出的线性函数,无论你神经网络有多少层,输出都是输入的线性组合,相当于没有隐藏层,网络的学习能力有限。
深度学习最主要的特点就是:多层,非线性。 多层为了能够学习更多的东西;没有非线性,多层和单层没什么区别,就是简单的线性组合,连异或都解决不了。
感兴趣的可以看这篇文章:为什么神经网络需要解决多层和非线性问题

问:介绍一下你熟悉的激活函数?特点,优缺点

sigmoid函数

f ( z ) = 1 1 + e − z f(z) = \frac{1}{1+e^{-z}} f(z)=1+ez1
特点:
它能够把输入的连续实值变换为0和1之间的输出,特别的,如果是非常大的负数,那么输出就是0;如果是非常大的正数,输出就是1.
导数曲线:
3
缺点:

  1. 容易导致梯度消失。
    如果我们初始化神经网络的权值为 [0,1]之间的随机值,由反向传播算法的数学推导可知,梯度从后向前传播时,每传递一层梯度值都会减小为原来的0.25倍,如果神经网络隐层特别多,那么梯度在穿过多层后将变得非常小接近于0,即出现梯度消失现象。
    (这里有个坑,面试官可能听你提起反向传播,然后问你:什么是反向传播?会推导公式吗?看大佬博客:神经网络BP反向传播算法原理和详细推导流程
    BP算法是一个迭代算法,它的基本思想为:(1)先计算每一层的状态和激活值,直到最后一层(即信号是前向传播的);(2)计算每一层的误差,误差的计算过程是从最后一层向前推进的(这就是反向传播算法名字的由来);(3)更新参数(目标是误差变小)。求解梯度用链导法则。迭代前面两个步骤,直到满足停止准则(比如相邻两次迭代的误差的差别很小)。

    问:梯度消失和梯度爆炸?改进方法。
    解决梯度爆炸:
    a.可以通过梯度截断。通过添加正则项。
    解决梯度消失:
    a.将RNN改掉,使用LSTM等自循环和门控制机制。
    b.优化激活函数,如将sigmold改为relu
    c.使用batchnorm
    d.使用残差结构
    可以看这篇文章 详解机器学习中的梯度消失、爆炸原因及其解决方法

  2. Sigmoid 的输出不是0均值(即zero-centered)。
    这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入。
    结果:那么对w求局部梯度则都为正,这样在反向传播的过程中w要么都往正方向更新,要么都往负方向更新,导致有一种捆绑的效果,使得收敛缓慢。(我没太看明白,点击看原文这里,或者这里
    我的理解是,像relu函数,导数为1,输入正数输出则为正数,输入负数输出则为负数,正负情况都有。而若经过sigmoid后只有正数了,如果损失函数为二次函数 y = x 2 y=x^{2} y=x2,那只能从右边进行梯度下降了,左边那一块没有用上。(梯度下降是考点,引申 sgd,batch-sgd,优缺点; 其他优化器等 查看:机器学习:各种优化器Optimizer的总结与比较
    (面试官看你说了数据的偏移,不是0均值,可能会问你,你会哪些normalization[规范化]方法?batch norm,layer norm[头条算法岗问过]会不会?
    查看:Layer-Normalization详细解析 或者 Batch-Normalization详细解析或者看这篇

### 关于XXL-JOB的面试题目及解答 #### 什么是XXL-JOB? XXL-JOB是一个分布式任务调度平台,其设计目标是开发迅速、学习简单、轻量级、易扩展。它采用Java语言编写,基于Quartz框架进行了二次开发,具备可视化的操作界面以及强大的集群管理能力[^1]。 #### 讲解XXL-JOB的工作原理 XXL-JOB通过注册中心来协调各个节点之间的通信与协作。当执行器启动时会向调度器注册自己,并定期发送心跳包保持连接状态;而调度器则负责根据设定的时间表达式计算下一次触发时间并通知相应的执行器去运行指定的任务实例。此外还实现了诸如弹性伸缩、故障转移等功能特性以保障系统的高可用性和稳定性。 #### 如何在项目中使用XXL-JOB? 要在项目里集成XXL-JOB主要分为以下几个方面考虑: - **引入依赖**:按照官方文档指引添加Maven或Gradle中的相应坐标; - **配置文件设置**:修改application.yml或其他形式的应用程序属性文件里的参数项比如admin地址列表、access token认证密钥等; - **创建JobHandler类**:继承IJobHandler接口实现doExecute方法定义具体业务逻辑; - **部署上线前测试验证功能是否正常工作**: ```java import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.handler.IJobHandler; public class MySimpleJob extends IJobHandler { @Override public ReturnT<String> execute(String param) throws Exception { System.out.println("My simple job is running..."); return SUCCESS; } } ``` #### XXL-JOB的任务路由策略有哪些? XXL-JOB提供多种任务分配算法供开发者选用,包括但不限于轮询模式(RoundRobin)、最小活跃线程数优先(LeastActive)、哈希一致性HashingConsistent等。这些不同的负载均衡方案能够适应不同场景下的性能优化需求。 #### xxl-job 和 Quartz 主要区别是什么? 两者都是优秀的定时任务解决方案工具库,但是存在一些显著差异之处: - **架构层面**:xxl-job天生就支持分布式的环境部署形态,相比之下quartz虽然也能做到这一点但需要额外配置较多组件才能达成目的; - **用户体验角度出发来看待的话**:前者拥有图形化UI便于管理员日常运维管理工作开展,后者更多依靠命令行或者第三方插件完成相同的操作流程; - **社区生态建设情况对比而言**:目前看来国内对于xxl-job的关注度更高一点,在遇到问题求助的时候更容易获得帮助和支持。 #### xxl-job 支持哪些任务调度方式及其特点分析? | 调度类型 | 描述 | | --- | --- | | Cron 表达式驱动型 | 用户自行输入标准cron格式字符串描述周期规律,灵活性极高适用于大部分场合 | | 固定频率间隔型 | 设定固定的毫秒级别单位作为两次相邻动作之间等待的时间长度,适合用于监控指标采集之类高频次重复性作业| | 定时定点触发型 | 只会在特定日期时刻点上激活一次性的计划安排,常应用于节假日促销活动开启关闭控制等方面| 每种类型的优点在于针对性强易于理解和掌握缺点则是适用范围相对较窄无法覆盖所有可能遇见的实际应用场景因此实际选型过程中应当综合考量业务背景因素做出合理决策. #### xxl-job 的任务触发方式有哪些?怎样进行配置呢? xxl-job允许用户选择手动按钮点击即时生效或是自动按预设条件满足后立即响应两种途径来进行触发行为的选择。具体的配置过程涉及到后台数据库表结构的设计变更以及前端页面交互元素布局调整等多个环节,建议参照官方给出的最佳实践指南逐步实施改造升级措施确保整个迁移过渡平稳顺利。 #### 分布式环境下xxl-job 是怎么保证任务只被执行一次的? 为了防止因网络波动等原因造成同一份指令被多个服务器同时接收到从而引发数据不一致风险现象的发生,xxl-job采取了一系列预防机制如全局唯一ID生成规则制定、乐观锁版本号校验更新机制建立等等手段有效规避此类隐患威胁提升整体健壮程度水平。 #### xxl-job 是否能处理好任务间的先后顺序关系?如果可以应该怎样做才合适? 确实如此,xxl-job内置了一套完善的前置依赖解析引擎可以帮助我们轻松解决这个问题。只需要在新建job handler对象之前先声明好上下游关联链条即可让系统自动识别并遵循既定路径依次串行调用下去直至全部结束为止。 #### xxl-job 提供了几种常见的任务分片策略选项可供挑选?依据什么原则选取最恰当的那个? 针对大规模并发请求场景下可能出现的数据倾斜难题,xxl-job特别推出了三种主流的sharding policy让用户自由组合运用: - `AVERAGE` 平均划分法——将总数均匀分割成若干子集分别交给各台机器独立承担一部分压力; - `MOD` 模运算取余法则——利用hashcode%size的方式快速定位到某一台设备上面集中处理一批相似特征的对象集合体; - `CUSTOMIZED` 自定义函数映射规则——给予充分自主权给使用者根据自己特有的业务诉求灵活定制个性化的映射转换逻辑。 最终决定采用哪一种取决于当前所处的具体上下文中各项约束条件综合作用的结果。 #### 当XXL-Job的任务执行失败了,应该如何排查和处理? 面对这种情况可以从这几个方向入手调查原因所在: - 查看日志记录寻找异常堆栈信息线索; - 利用调试工具单步跟踪源码找出潜在缺陷位置; - 对比预期输出结果同实际情况是否存在偏差; - 尝试简化输入参数规模缩小影响面以便更快锁定根本症结所在; - 如果有必要还可以联系开源社区寻求外部力量协助解决问题[^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值