常见的损失函数,代价函数以及优化算法汇总

本文详细介绍了机器学习和深度学习中的损失函数,包括0-1损失、平方损失、绝对值损失等,并讨论了代价函数、目标函数及其关系。此外,还讲解了优化算法,如SGD、Adam、NAG等,并对比了固定学习率与自适应学习率的优化策略。最后,提到了最小二乘法作为非迭代的优化方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在机器学习和深度学习中,我们通常只需要掌握三个步骤就可以完成训练了,拿起数据(特征),搭上模型(目标函数,损失函数,代价函数),不断优化(优化函数-梯度下降,adam,动量-找到最优的W),就可以完成了

1. 损失函数、代价函数与目标函数
损失函数(Loss Function):是定义在单个样本上的,是指一个样本的误差。
代价函数(Cost Function):是定义在整个训练集上的,是所有样本误差的平均,也就是所有损失函数值的平均。
目标函数(Object Function):是指最终需要优化的函数,一般来说是经验风险+正则化,也就是(代价函数+正则化项)。
损失函数:
……0-1损失函数
……平方损失函数
……绝对值损失函数
……对数损失函数
……指数损失函数
……铰链损失函数
代价函数:
……均方误差
……均方根误差
……平均绝对误差
……交叉熵代价函数

2. 损失函数
(1)0-1损失函数(0-1 loss function) -----------感知机
在这里插入图片描述
(2)平方损失函数(quadratic loss function)------------线性回归
在这里插入图片描述
(3)绝对值损失函数(absolute loss function)
在这里插入图片描述
(4)对数损失函数(logarithmic loss function)-----------逻辑回归
在这里插入图片描述
(5)指数损失函数(Exponential Loss Function)----------adaboost
在这里插入图片描述
(6)铰链损失函数(Hinge loss) ----------SVM
Hinge loss一般分类算法中的损失函数,尤其是SVM。 其中 y=+

### A*算法公式的性能优化方法 A*算法是一种经典的启发式搜索算法,在路径规划领域广泛应用。其核心公式为: \[ f(n) = g(n) + h(n) \] 其中: - \( g(n) \) 表示从起点到节点 \( n \) 的实际代价; - \( h(n) \) 是从节点 \( n \) 到目标节点的估计代价。 为了提高A*算法的性能,可以从以下几个方面入手进行优化[^1]: #### 1. 启发函数的选择 \( h(n) \) 的设计直接影响算法的效率和准确性。如果 \( h(n) \) 过于保守,则可能导致大量不必要的状态扩展;而过高的 \( h(n) \) 又可能破坏算法的最优性。因此,应选择满足 **可采纳性** 和 **一致性** 条件的启发函数。 例如,在二维网格地图上,常用的启发函数包括曼哈顿距离和欧几里得距离。对于稀疏障碍物的地图,可以选择更复杂的启发函数来进一步减少搜索空间。 ```python def heuristic(node, goal): # 曼哈顿距离作为启发函数 return abs(node.x - goal.x) + abs(node.y - goal.y) ``` #### 2. 数据结构优化 优先队列(Priority Queue)是实现A*算法的关键数据结构。传统数组或链表形式的优先队列可能会导致较高的时间复杂度。可以通过二叉堆或其他高效的数据结构替代,从而降低插入和删除操作的时间开销[^3]。 ```python import heapq class PriorityQueue: def __init__(self): self.elements = [] def empty(self): return not self.elements def put(self, item, priority): heapq.heappush(self.elements, (priority, item)) def get(self): return heapq.heappop(self.elements)[1] ``` #### 3. 节点剪枝技术 为了避免重复计算已访问过的节点,可以引入闭合列表(Closed List)。当某个节点已经被完全展开时,将其加入闭合列表中,后续不再考虑该节点。这不仅减少了冗余运算,还提高了内存利用率。 ```python closed_set = set() open_queue = PriorityQueue() if node in closed_set: continue else: open_queue.put(node, f_score[node]) closed_set.add(node) ``` #### 4. 并行化处理 现代计算机硬件通常具备多核处理器能力。通过并行化手段加速A*算法执行过程成为一种可行方案。具体做法是对不同分支分配独立线程或者进程分别求解子问题,最后汇总结果得到全局最优解[^4]。 --- ### 结论 通过对上述几个方面的改进措施实施后,能够有效提升A*算法的整体运行效率。值得注意的是,每种优化方式都有各自适用范围及限制条件,需根据实际情况灵活选用合适的技术组合以达到最佳效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值