神经网络算法 - 损失函数(损失函数)
前言
本文将从损失函数的本质、损失函数的原理、损失函数的算法三个方面,详细介绍损失函数Loss Function。
损失函数
1、损失函数的本质
(1)机器学习“三板斧”
选择模型家族,定义损失函数量化预测误差,通过优化算法找到最小损失的最优模型参数。
机器学习 VS 人类学习
- 定义一个函数集合(模型选择)
目标:确定一个合适的假设空间或模型家族。
示例:线性回归、逻辑回归、神经网络、决策时等。
考虑因素:问题的复杂性、数据的性质、计算资源等。
- 判断函数的好坏(损失函数)
目标:量化模型预测与真实结果之间的差异。
示例:均方误差(MSE)用于回归;交叉熵损失用于分类。
考虑因素:损失的性质(凸性、可微性等)、易于优化、对异常值的鲁棒性等。
- 选择最好的函数(优化算法)
目标:在函数集中找到最小化损失函数的模型参数。
主要方法:梯度下降及其变种(随机梯度下降、批量梯度下降、Adam等)。
考虑因素:收敛速度、计算效率、参数调整的复杂性等。
(2)损失函数的本质
量化模型预测与真实结果之间的差异。
损失函数的本质
- 损失函数的概念:
损失函数用于量化模型预测与真实值之间的差异。
它是预测值与真实值之间差距的计算方法,并通过深度学习框架(如PyTorch、TensorFlow)进行封装。
- 损失函数的重要性:
在机器学习中,目标是使预测值尽可能接近真实值,因此需要通过最小化预测值和真实值之间的差异来实现。
损失函数的选择对于模型的训练速度和效果至关重要,因为不同的损失函数会导致不同的梯度下降速度。
- 损失函数的位置:
损失函数位于机器学习模型的向前传播和向后传播之间。
在向前传播阶段,模型根据输入特征生成预测值。
损失函数接收这些预测值,并计算与真实值之间的差异。
这个差异随后被用于向后传播阶段,以更新模型的参数并减少未来的预测误差。
损失函数的位置
2、损失函数的原理
误差反映单个数据点的预测偏差,损失则是整体数据集的预测偏差总和。损失函数运用这两者原理,聚合误差以优化模型,降低总体预测偏差。
(1)误差(Error)
对单个数据点预测结果与真实值之间的差异,用于评估模型在特定数据点上的预测准确性。
- 定义:
误差是指模型在对单个数据点进行预测时,其预测结果与真实值之间的差异或偏离程度。这种差异反映了模型预测的不准确性或偏差。
- 计算:
误差可以通过多种数学公式来计算。其中,绝对误差是预测值与真实值之间差值的绝对值,用于量化预测偏离真实值的实际大小;平方误差则是预测值与真实值之间差值的平方,常用于平方损失函数中,以便更显著地突出较大的误差。
- 误差棒:
误差棒通常以线条或矩形的形式出现在数据点的上方、下方或两侧,其长度或大小代表了误差的量级。这种可视化方法有助于识别潜在的问题区域,并指导进一步的模型改进或数据分析。
横轴名称
(2)损失(Loss)
损失是衡量机器学习模型在整个数据集上预测不准确性的总体指标,通过最小化损失可以优化模型参数并改进预测性能。
- 定义:
损失是衡量机器学习模型在整个数据集上预测的总体不准确性的指标。它反映了模型预测与真实值之间的差异,并将这些差异进行聚合,以提供一个标量值来表示预测的总体不准确性。
- 计算:
损失的具体计算是通过损失函数来完成的。损失函数接受模型的预测值和真实值作为输入,并输出一个标量值,即损失值,表示模型在整个数据集上的总体预测误差。
- 损失曲线:
损失曲线直观地呈现了模型在训练过程中损失值的变化趋势。通过绘制训练损失和验证损失随迭代次数的变化,我们能够洞察模型是否遭遇过拟合或欠拟合等问题,进而调整模型结构和训练策略。
损失曲线
3、损失函数的算法
损失函数的算法
(1)均方差损失函数(MSE)
通过计算模型预测值与真实值之间差值的平方的平均值,衡量回归任务中预测结果的准确性,旨在使预测值尽可能接近真实值。
均方差损失函数(MSE)
- 应用场景:
主要用于回归问题,即预测连续值的任务。
- 公式:
均方差损失函数(MSE)公式
- 特点:
当预测值接近真实值时,损失值较小。
当预测值与真实值差距较大时,损失值迅速增大。
由于其梯度形式简单,易于优化。
- 优化目标:
最小化均方差损失,使得模型的预测值尽可能接近真实值。
(2)交叉熵损失函数(CE)
用于衡量分类任务中模型预测的概率分布与真实标签之间的差异,旨在通过最小化损失来使模型预测更加接近真实类别。
交叉熵损失函数(CE)
- 应用场景:
主要用于分类问题,尤其是多分类问题。
- 公式:
交叉熵损失函数(CE)公式
- 特点:
当预测概率分布与真实概率分布相近时,损失值较小。
对预测概率的微小变化非常敏感,尤其当真实标签的概率接近0或1时。
适用于概率输出的模型,如逻辑回归、softmax分类器等。
- 优化目标:
最小化交叉熵损失,使得模型对每个类别的预测概率尽可能接近真实概率分布。
参考:架构师带你玩转AI
推荐阅读
-
孪生网络入门(上) 连体网络及其损失函数-3 损失函数
-
交叉熵损失函数的推导(逻辑回归)
-
在深度神经网络程序中,前向函数实际上是用来表示程序逻辑的,尤其是网络的前向传播过程。它描述了输入数据如何通过网络的每一层,并最终得到输出预测结果的流程
-
算法系列--Linux 下的共享内存函数,实现进程间通信并封装为一个类(I)--主要函数说明
-
L1、L2 损失函数和正则化惩罚项
-
机器学习基础-监督学习-余弦相似性损失的客观函数(余弦相似性损失)
-
几种常见损失函数介绍 损失函数和 Pytorch 实现
-
经典排序算法 - 冒泡排序 - 函数调用 详细答案版本
-
实时角色控制:基于相位函数神经网络的研究
-
NeurIPS 2022 | 最强斗地主AI!网易互娱AI Lab提出基于完美信息蒸馏的方法-完美信息蒸馏(PTIE) 在斗地主游戏中,非完美信息的引入主要是由于三位玩家均不能看到别人的手牌,对于任意一位玩家而言,仅可知道其余两位玩家当前手牌的并集,而难于精准判断每位玩家当前手牌。完美信息蒸馏的思路是针对这种非完美问题,构建一个第三方角色,该角色可以看到三位玩家的手牌,该角色在不告知每位玩家完美信息的情况下通过信息蒸馏的方式引导玩家打出当前情况下合理的出牌。 以强化学习常用的 Actor-Critic 算法为例,PTIE 在 Actor-Critic 算法的应用中可以利用 Critic 的 Value 输出作为蒸馏手段来提升 Actor 的表现。具体而言即在训练中 Critic 的输入为完美信息(包含所有玩家的手牌信息),Actor 的输入为非完美信息(仅包含自己手牌信息),此种情况下 Critic 给予的 Value 值包含了完美信息,可以更好地帮助 Actor 学习到更好的策略。 从更新公式上来看,正常的 Actor-Critic 算法 Actor 更新的方式如下: 在 PTIE 模式下,对于每个非完美信息状态 h,我们可以在 Critic 中构建对应的完美信息状态 D(h),并用 Critic 的输出来更新 Actor 的策略梯度,从而达到完美信息蒸馏的效果。 PTIE 框架的整体结构如下图所示: 无论是训练还是执行过程中智能体都不会直接使用完美信息,在训练中通过蒸馏将完美信息用于提升策略,从而帮助智能体达到一个更高的强度。 PTIE 的另一种蒸馏方式是将完美信息奖励引入到奖励值函数的训练中,PerfectDou 提出了基于阵营设计的完美信息奖励 node reward,以引导智能体学习到斗地主游戏中的合作策略,其定义如下: 如上所示,完美信息部分 代表 t 时刻地主手牌最少几步可以出完,在斗地主游戏中可以近似理解为是距游戏获胜的距离, 代表 t 时刻地主阵营和农民阵营距游戏获胜的距离之差, 为调节系数。通过此种奖励设计,在训练时既可以一定程度地引入各玩家的手牌信息(出完的步数需要知道具体手牌才能计算),同时也鼓励农民以阵营的角度做出决策,提升农民的合作性。 特征构建: PerfectDou 针对牌类游戏的特点主要构建了两部分特征:牌局状态特征和动作特征。其中牌局状态特征主要包括当前玩家手牌牌型特征、当前玩家打出的卡牌牌型特征、玩家角色、玩家手牌数目等常用特征,动作特征主要用于刻画当前状态下玩家的所有可能出牌,包括了每种出牌动作的牌型特征、动作的卡牌数目、是否为最大动作等特征。 牌型特征为 12 * 15 的矩阵,如下图所示: 该矩阵前 4 行代表对应每种卡牌的张数,5-12 行代表该种卡牌的种类和对应位置。 网络结构和动作空间设计 针对斗地主游戏出牌组合数较多的问题,PerfectDou 基于 RLCard 的工作上对动作空间进行了简化,对占比最大的两个出牌牌型:飞机带翅膀和四带二进行了动作压缩,将整体动作空间由 27472 种缩减到 621 种。 PerfectDou 策略网络结构如下图所示: 策略网络结构同样分为两部分:状态特征部分和动作特征部分。 在状态特征部分,LSTM 网络用于提取玩家的历史行为特征,当前牌局状态特征和提取后的行为特征会再通过多层的 MLP 网络输出当前的状态信息 embedding。 在动作特征部分,每个可行动作同样会经过多层 MLP 网络进行编码,编码后的动作特征会与其对应的状态信息 embedding 经过一层 MLP 网络计算两者间的相似度,并经由 softmax 函数输出对应的动作概率。 实验结果