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

关于神经网络中的激活函数

这篇博客主要介绍一下神经网络中的激活函数以及为什么要存在激活函数。

首先,我先做一个简单的类比:激活函数的作用就像给神经网络里的 “数字信号” 加了一个 “智能阀门”,让机器能学会像人类一样思考复杂问题。

没有激活i函数的神经网络

没有激活i函数的神经网络就像是一台“傻机器”,假设你用纯数学公式搭一个神经网络(没有激活函数),它的计算逻辑是这样的:

输入层 → 隐藏层:h=W1​⋅x+b1​
隐藏层 → 输出层:y^​=W2​⋅h+b2​
把两层合并后会发现:y^​=W2​⋅(W1​⋅x+b1​)+b2​=(W2​W1​)⋅x+(W2​b1​+b2​)

本质还是一个线性公式(形如 y=kx+b),只能拟合直线,连 “判断图片里有没有猫” 这种曲线问题都解决不了(因为猫和非猫的边界通常是复杂曲线)。

就像你让一个只会做加减乘除的计算器去解微积分题 —— 它根本看不懂题目

激活函数

激活函数的核心作用是让神经网络学会 “非线性变换”,简单说就是:

  • 对符合条件的信号 “放行通过”,
  • 对不符合条件的信号 “过滤或扭曲”,
  • 让不同信号之间产生复杂的逻辑关系。

激活函数的类比

像 “安检门” 一样过滤无效信号(以 ReLU 函数为例)

ReLU 函数:f(z)=max(0,z)

  • 作用:如果输入信号 z 是负数(比如−5),直接变成 0(相当于 “拦截”);如果是正数(比如 3),原样输出(相当于 “放行”)。
  • 类比
    • 你去机场过安检,包里的水如果超过 100ml(信号为负),直接被扣下(输出 0);
    • 小于 100ml 的水(信号为正),可以带进去(输出原值)。
  • 效果:让神经网络专注于 “有意义的信号”,过滤掉干扰项,比如识别图片时只关注 “有像素的区域”,忽略全黑的背景。

像 “调光开关” 一样压缩信号范围(以 Sigmoid 函数为例)

Sigmoid 函数:f(z)=1+e−z1​,输出永远在 0 到 1 之间。

  • 作用:把任意大小的信号(比如−100或+100)“挤压” 到 0~1 的区间,类似把 “强光” 和 “弱光” 都转化为 “手机屏幕能显示的亮度”。
  • 类比
    • 你用手机拍夜景,光线太强(信号值大)会过曝,太弱(信号值小)会漆黑,手机算法会自动把光线压缩到适合显示的范围(0~1),让亮处不过曝、暗处能看清。
  • 效果:适合处理 “概率问题”,比如判断 “这张图是猫的概率是 90%”(输出 0.9),不是猫的概率是 10%(输出 0.1)。

像 “跷跷板” 一样让信号产生对立关系(以 Tanh 函数为例)

Tanh 函数:f(z)=ez+e−zez−e−z​,输出在 - 1 到 1 之间。

  • 作用:把信号转化为 “正” 和 “负” 两种对立状态,类似给信号装了一个 “跷跷板”,一头是正向激活,一头是负向激活。
  • 类比
    • 你和朋友玩跷跷板,体重差异会让一端升高(输出 + 1),一端降低(输出 - 1),体重相近时会平衡在中间(接近 0)。
  • 效果:适合处理 “情感分类” 问题,比如判断一句话是 “积极情绪”(输出 + 0.8)还是 “消极情绪”(输出 - 0.6)。

为什么一定要有激活函数(非线性)--人类思维的本质是 “非线性”

for example

  • 你判断 “今天要不要出门”,不是只看单一因素(比如 “温度 > 20℃就出门”),而是综合考虑:
    • 温度是否合适(激活 1)、
    • 有没有下雨(激活 2)、
    • 朋友是否约你(激活 3)、
    • 工作是否完成(激活 4)……
      这些因素通过 “非线性组合”(比如 “温度合适  没下雨  朋友强烈约我”)最终决定你的行为。

激活函数就是在模拟这种非线性逻辑

  • 每个隐藏层神经元用激活函数处理信号后,相当于学会了一个 “局部判断规则”(比如 “温度 > 20℃时激活”),
  • 多层神经元的激活函数叠加后,就能组合出无穷多复杂规则(比如 “温度> 20℃  下雨概率 < 30%  朋友约我吃饭”),
  • 最终让神经网络能像人类一样解决复杂问题(如图像识别、语言翻译等)。

总结

无激活函数的网络只能做​线性运算(低级计算器)有激活函数的网络能做​非线性变换(智能大脑)
一句话:激活函数让数字信号学会 “思考”,让机器从 “机械计算” 进化到 “智能决策”!

http://www.xdnf.cn/news/10592.html

相关文章:

  • 【Linux命令】scp远程拷贝
  • 什么是promise
  • UI 设计|提高审美|极简扁平过时吗?
  • “人单酬“理念:财税行业的自我驱动革命
  • ZLG ZCANPro,ECU刷新,bug分享
  • 系统架构设计师(一):计算机系统基础知识
  • 【C++高级主题】命令空间(六):重载与命名空间
  • 8天Python从入门到精通【itheima】-60~61
  • 笔试笔记(运维)
  • LeetCode - 965. 单值二叉树
  • 计算机网络第1章(下):网络性能指标与分层模型全面解析
  • PCB设计教程【强化篇】——USB拓展坞PCB布线
  • javaEE->多线程:定时器
  • 【Hot 100】45. 跳跃游戏 II
  • Python训练第四十一天
  • 【创新实训个人博客】实现了新的前端界面
  • CP4-OFDM模糊函数原理及仿真
  • 三方接口设计注意事项
  • 人工智能在智能能源管理中的创新应用与未来趋势
  • ContentProvider URI匹配机制详解
  • DELETE 与 TRUNCATE、DROP 的区别
  • 【Java基础】Java基础语法到高级特性
  • Canvas: trying to draw too large(256032000bytes) bitmap.
  • 02.上帝之心算法用GPU计算提速50倍
  • Java对象的内存结构
  • 华为IP(7)
  • 工作流引擎-04-流程引擎(Process Engine)activiti 优秀开源项目
  • 【AI论文】SWE-rebench:一个用于软件工程代理的任务收集和净化评估的自动化管道
  • 搭建基于VsCode的ESP32的开发环境教程
  • PTA-根据已有类Worker,使用LinkedList编写一个WorkerList类,实现计算所有工人总工资的功能。