基于MCP协议构建广告自动化Skill:连接AI与广告平台的实战指南
2026/8/14 2:34:03
torch.nn.ReLU()—— 最常用的激活函数 一句话 ReLU 把负数变成0,正数原样保留。相当于"整流器"——只让正信号通过。 公式 $$\text{ReLU}(x)=\max(0,x)$$importtorchimporttorch.nnasnn relu=nn.ReLU()x=torch.tensor([-3.0,-1.0,0.0,2.0,5.0])print(relu(x))# tensor([0., 0., 0., 2., 5.])# ↑负数变0 ↑正数不变图像 │ ● │ ● │ ● │ ● │ ● ────────┼────────────── ●●●●●●│ ← 负数全被"截断"成0-3-10123为什么要用激活函数? 如果没有激活函数,多层神经网络等价于一层(矩阵乘法套矩阵乘法还是矩阵乘法),表达能力极弱。 没有激活函数: y=W2(W1·x)=W·x → 还是线性,学不了复杂规律 有激活函数: y=W2(ReLU(W1·x))→ 非线性,能拟合任意复杂函数 ReLU 给网络引入"非线性",让它能学到"如果 A 则 B"这种非线性关系。 为什么 ReLU 比 sigmoid 好? sigmoid ReLU 输出范围(0,1)[0,+∞)梯度 两端趋近0(梯度消失) 正数区恒为1(稳定) 计算 复杂(e 指数) 简单(max(0,x)) 训练速度 慢 快 梯度消失问题:sigmoid 在 x 很大或很小时梯度几乎为0,深层网络传着传着梯度就没了,学不动。ReLU 在正数区梯度恒为1,不会有这个问题。 在 LLM 中的角色 GPT 用的是 ReLU 的改进版 GELU(你在 Ch04 见过):# Ch04 的 FeedForward 里classFeedForward(nn.Module):def__init__(self,cfg):self.layers=nn.Sequential(nn.Linear(emb_dim,4*emb_dim),# 放大GELU(),# ← 和 ReLU 一样的"位置",但更平滑nn.Linear(4*emb_dim,emb_dim),# 缩小)输入(768)→ Linear → 放大到3072→ GELU激活 → Linear → 缩回768↑ GELU 和 ReLU 都是"非线性开关", GELU 是 ReLU 的平滑版本,效果更好 速记 特性 说明 作用 负数→0,正数保留 公式max(0,x)为什么用 引入非线性,让网络能学复杂规律 优势 计算快、无梯度消失 LLM 里 GPT 用它的平滑版 GELU 一句话:ReLU 就是"负的砍掉,正的留下",给神经网络注入非线性能力,是训练能收敛的关键组件之一。