神经网络激活函数选择与PyTorch实现详解,大模型开发基础必备知识!
神经网络的灵感来自于人脑的神经系统:每个『逻辑回归』单元对应一个神经元,一层一层的『逻辑回归』单元连在一起就组成了『神经网络』。
看到这里你可能也明白了为什么 Sigmod 称为激活函数,就是对神经元信号传递行为的拙劣模仿。
一、神经网络
『逻辑回归』是一个很有效的分类模型,但是当特征增多时,效果并不会变好,而是会表现出欠拟合的现象。
怎么优化呢?聪明的专家们发现可以依赖专家知识抽象出高级特征,将特征数量控制在“适宜”的范围。

该方法虽然有效,但是没有通用性,太依赖专家知识。
自然而然地,专家们有了一个想法:让模型自己抽象高级特征可以么?把它当做一个黑盒。

当然可以!这就成了『神经网络』!
1.1 隐藏层的激活函数
对于隐藏层的『逻辑回归』单元,其激活函数引入了非线性,使得神经网络可以拟合任意函数。
通过上节我们了解到 Sigmod 适合作为二分类问题的激活函数,对于上图『神经网络』的输出层,使用该激活函数是合适的,但是对于隐藏层呢?
不合适,主要原因有两个:
- 梯度消失问题
Sigmod 函数的导数最大值只有0.25,梯度通过链式法则反向传播,每一层的梯度都需要乘以上一层的梯度,梯度值会呈指数级迅速减小,趋近于0。靠近输入层的隐藏层权重几乎得不到有效的更新,导致这些层无法有效地学习。 - 非零中心
Sigmod 函数的输出值恒为正,这会导致其后一层神经元的输入全部为正。在反向传播计算权重的梯度时,根据链式法则,权重的梯度方向完全取决于其上层传回的梯度符号,所有的权重在更新时,只能同时向正方向或同时向负方向更新,优化路径会呈现锯齿形,收敛速度变慢。
那么隐藏层应该使用哪个激活函数呢?
ReLU(Rectified Linear Unit)[1],整流线性单位函数,目前事实上的工业标准,计算效率极高,同时又解决了以上问题。
ReLU 唯一的缺陷就是 Dying ReLU 问题:当输入为负时,梯度严格为0,这意味着一旦一个神经元落入这种情况,它的权重可能永远无法更新,该神经元在后续训练中“死亡”且不再起作用。但是这不是很难处理的问题,微调一下,Leaky ReLU/PReLU 就解决了。
1.2 从二分类到多分类
『神经网络』这么强大,只解个二分类问题有点儿大材小用,例如经典的手写数字识别就是个十分类问题。
面对多分类问题,Sigmod 函数就不太合适了,聪明的专家们又找到了另一个激活函数:Softmax[2]。
其中 为输出层经过线性回归,但还没有经过激活函数的值,也称作logits。Softmax 函数本质上就是计算概率,只是计算的方式会放大 logits 之间的差异,加快训练的速度。
Softmax 函数度对应的损失函数为交叉熵损失函数(Cross Entropy Loss),相对于 Sigmoid 的损失函数少了一个二分类。
其中 为样本数, 为分类个数, 就是激活函数的输出。
二、PyTorch 实现
2.1 Module
class NeuralNetwork(nn.Module): def __init__(self): super().__init__() self.model = nn.Sequential( nn.Linear(28 * 28, 128), nn.ReLU(), nn.Linear(128, 128), nn.ReLU(), nn.Linear(128, 128), nn.ReLU(), nn.Linear(128, 64), nn.ReLU(), nn.Linear(64, 10) ) def forward(self, x): return self.model(x)
这段代码定义了一个四层隐藏层的神经网络,隐藏层的激活函数为 ReLU。
相信眼尖的你也发现了,代码没有指定输出层的激活函数,在 PyTorch 的实现中将 Softmax 函数的计算集成在了 nn.CrossEntropyLoss 损失函数中。
2.2 训练
learning_rate = 0.1model = NeuralNetwork().to(device)criterion = nn.CrossEntropyLoss()optimizer = optim.SGD(model.parameters(), lr=learning_rate)
PyTorch 对损失函数和梯度下降封装的很彻底。
# 训练过程model.train()for epoch in range(num_epochs): total_loss = 0 correct = 0 total = 0 for images, labels in train_loader: images, labels = images.to(device), labels.to(device) outputs = model(images) loss = criterion(outputs, labels) optimizer.zero_grad() loss.backward() optimizer.step() total_loss += loss.item() # 计算训练准确率 preds = torch.argmax(outputs, dim=1) correct += (preds == labels).sum().item() total += labels.size(0) avg_loss = total_loss / len(train_loader) train_acc = 100 * correct / total print(f"Epoch {epoch+1}/{num_epochs}, Loss: {avg_loss:.4f}, Train Accuracy: {train_acc:.2f}%")
另外 PyTorch 将参数初始化的逻辑也封装好了,什么需要“将权重初始化为均值为0,标准差为的随机变量“的技巧也不需要自己写了,但是训练数据的归一化和标准化还是需要自己写。
三、AI大模型从0到精通全套学习大礼包
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
只要你是真心想学AI大模型,我这份资料就可以无偿共享给你学习。大模型行业确实也需要更多的有志之士加入进来,我也真心希望帮助大家学好这门技术,如果日后有什么学习上的问题,欢迎找我交流,有技术上面的问题,我是很愿意去帮助大家的!
如果你也想通过学大模型技术去帮助就业和转行,可以扫描下方链接👇👇
大模型重磅福利:入门进阶全套104G学习资源包免费分享!

01.从入门到精通的全套视频教程
包含提示词工程、RAG、Agent等技术点

02.AI大模型学习路线图(还有视频解说)
全过程AI大模型学习路线


03.学习电子书籍和技术文档
市面上的大模型书籍确实太多了,这些是我精选出来的


04.大模型面试题目详解


05.这些资料真的有用吗?
这份资料由我和鲁为民博士共同整理,鲁为民博士先后获得了北京清华大学学士和美国加州理工学院博士学位,在包括IEEE Transactions等学术期刊和诸多国际会议上发表了超过50篇学术论文、取得了多项美国和中国发明专利,同时还斩获了吴文俊人工智能科学技术奖。目前我正在和鲁博士共同进行人工智能的研究。
所有的视频由智泊AI老师录制,且资料与智泊AI共享,相互补充。这份学习大礼包应该算是现在最全面的大模型学习资料了。
资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。


智泊AI始终秉持着“让每个人平等享受到优质教育资源”的育人理念,通过动态追踪大模型开发、数据标注伦理等前沿技术趋势,构建起"前沿课程+智能实训+精准就业"的高效培养体系。
课堂上不光教理论,还带着学员做了十多个真实项目。学员要亲自上手搞数据清洗、模型调优这些硬核操作,把课本知识变成真本事!

如果说你是以下人群中的其中一类,都可以来智泊AI学习人工智能,找到高薪工作,一次小小的“投资”换来的是终身受益!
应届毕业生:无工作经验但想要系统学习AI大模型技术,期待通过实战项目掌握核心技术。
零基础转型:非技术背景但关注AI应用场景,计划通过低代码工具实现“AI+行业”跨界。
业务赋能 突破瓶颈:传统开发者(Java/前端等)学习Transformer架构与LangChain框架,向AI全栈工程师转型。
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

更多推荐
所有评论(0)