这篇博客主要介绍一下神经网络中的激活函数以及为什么要存在激活函数。
首先,我先做一个简单的类比:激活函数的作用就像给神经网络里的 “数字信号” 加了一个 “智能阀门”,让机器能学会像人类一样思考复杂问题。
没有激活i函数的神经网络
没有激活i函数的神经网络就像是一台“傻机器”,假设你用纯数学公式搭一个神经网络(没有激活函数),它的计算逻辑是这样的:
输入层 → 隐藏层:h=W1⋅x+b1
隐藏层 → 输出层:y^=W2⋅h+b2
把两层合并后会发现:y^=W2⋅(W1⋅x+b1)+b2=(W2W1)⋅x+(W2b1+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% 或 朋友约我吃饭”),
- 最终让神经网络能像人类一样解决复杂问题(如图像识别、语言翻译等)。
总结
无激活函数的网络只能做线性运算(低级计算器)有激活函数的网络能做非线性变换(智能大脑)
一句话:激活函数让数字信号学会 “思考”,让机器从 “机械计算” 进化到 “智能决策”!