Py学习  »  机器学习算法

一文理清深度学习激活函数、损失函数与优化函数及关系

新机器视觉 • 4 天前 • 25 次点击  

点击下方卡片,关注“新机器视觉

视觉/AI重干货,第一时间送达

以下文章转载自moly的杂文

本文仅用于学术分享,如有侵权,请联系台作删文处理


激活函数、损失函数与优化函数是一个基础的深度学习框架如CNN、神经网络中均会涉及到的函数,那这些函数的作用是什么呢,相互作用优势什么呢?本文用极简的方法解释一下并且给出相应的代码

激活函数-参与预测值计算

激活函数为神经网络引入非线性变换。它们将输入信号转换为非线性输出,决定神经元是否被激活以及激活的程度。激活函数的导数在反向传播中至关重要。它直接参与链式法则的计算,影响梯度的大小和方向。选择不当的激活函数可能导致梯度消失(梯度接近0,参数无法更新)或梯度爆炸(梯度过大,训练不稳定)等问题,从而影响优化算法的效果。下面以relu函数为例解释一下

比如 ReLU函数的公式是 f(x)=max(0,x) 把x转换为0至正无穷的映射区间,其特点是

缓解梯度消失:输入x>0时,导数恒为 1,梯度可高效传递到深层;

稀疏激活:输入x≤0时输出为 0,使部分神经元 “休眠”,减少参数冗余,提升泛化能力。


综上,激活函数的核心是平衡非线性能力、梯度稳定性和计算效率。当前主流趋势是:隐藏层用 ReLU(简单场景)或 GELU(大模型场景),输出层根据任务用 Sigmoid(二分类)、Softmax(多分类)或 Linear(回归)。在模型中的代码如下(以神经网络为例)

图片

损失函数-对比预测值与实际值的差距


损失函数设定了模型学习的终极目标,模型训练的过程就是损失函数下降的过程

比如最简单的,用在回归模型里面损失函数均方误差(Mean Squared Error, MSE)

它的公式是

图片

然后在前向传播的过程中利用真实值与预测值的差距计算损失,再在反向传播的过程中对每个参数进行求导,(如y=ax+b就分别对a 和b求导,a和b就是参数)利用样本数据计算导数值,再用旧参数-学习率*新参数更新参数值。重复上述 4 个步骤(前向传播→计算损失→反向传播→更新参数),直到损失足够小(如L<0.1),此时模型参数(a,b)接近最优值,预测效果最好。

损失函数一般有哪些呢?回归任务(预测连续值):常用均方误差 (MSE)、平均绝对误差 (MAE)、Huber损失等。分类任务(预测离散标签):常用交叉熵损失 (Cross-Entropy Loss),包括二分类和多分类。

优化函数-更新参数的策略

我们刚才 前向传播→计算损失→反向传播→更新参数的过程,就是梯度下降的过程,就好像你在山顶往山下走。而优化算法就是更新参数的策略,它根据损失函数计算出的梯度(即损失函数对每个参数的偏导数),决定如何更新神经网络的权重和偏置等参数,以最小化损失函数。


图片

常用的优化算法有

  • 随机梯度下降 (SGD):最基本的形式,但可能收敛慢且容易陷入局部最优。
  • Adam (Adaptive Moment Estimation):结合了动量法和自适应学习率,是目前非常流行和常用的优化器,通常能取得较好的收敛效果。
图片
先定义要使用的损失函数的优化函数的类型,然后开始进行模型预测的循环:
1.调用优化函数(optimizer)清空梯度方法,
2.输出模型预测值(outputs)
3.计算损失函数(loss)
4.损失函数反向传播
5.使用优化函数更新权重

综上激活函数为神经网络提供非线性能力以拟合复杂数据,损失函数用于量化模型预测结果与真实标签的误差,优化函数则基于损失函数计算的误差,通过调整网络参数(如权重和偏置)来最小化误差,三者协同作用使神经网络能够从数据中学习并提升预测性能。
根据不同的模型,常见的使用组合如下
图片

此外,这三个函数也可以根据业务适配、训练效率等要求进行自定义,但是需要注意是损失函数和激活函数否可以求导及优化函数是否可以收敛等问题。


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/187810