【机器学习】(基础篇三) —— 损失函数和梯度下降

news2024/9/20 22:15:07

损失函数

损失函数(Loss Function),也称为代价函数(Cost Function)或误差函数(Error Function),是机器学习和深度学习中一个核心的概念。它用于量化模型预测与实际目标之间的差异,是优化算法(如梯度下降)试图最小化的函数。损失函数的选择直接影响模型的学习过程和性能。

损失函数的种类

损失函数的类型取决于具体的应用场景,常见的有以下几类:

  1. 均方误差(Mean Squared Error, MSE)
    • 用于回归任务,计算的是预测值与真实值之间的差的平方的平均值。
    • 公式为: M S E = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 \mathrm{MSE}=\frac1n\sum_{i=1}^n(y_i-\hat{y}_i)^2 MSE=n1i=1n(yiy^i)2
    • 对于较大的误差给予更大的惩罚。
  2. 均方根误差(Root Mean Squared Error, RMSE)
    • 也是用于回归,是MSE的平方根,单位与目标变量相同,便于解释。
    • 公式为: R M S E = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 \mathrm{RMSE}=\sqrt{\frac{1}{n}\sum_{i=1}^n(y_i-\hat{y}_i)^2} RMSE=n1i=1n(yiy^i)2
  3. 平均绝对误差(Mean Absolute Error, MAE)
    • 同样用于回归,计算的是预测值与真实值之间的差的绝对值的平均值。
    • 公式为: M A E = 1 n ∑ i = 1 n ∣ y i − y ^ i ∣ \mathrm{MAE}=\frac1n\sum_{i=1}^n|y_i-\hat{y}_i| MAE=n1i=1nyiy^i
    • 对于所有的误差给予相同的惩罚,相比MSE更鲁棒于异常值。
  4. 交叉熵损失(Cross Entropy Loss)
    • 广泛用于分类任务,特别是多类分类和二分类问题。
    • 对于二分类问题,通常使用二元交叉熵损失。
    • 公式为: CrossEntropy = − 1 n ∑ i = 1 n [ y i log ⁡ ( y ^ i ) + ( 1 − y i ) log ⁡ ( 1 − y ^ i ) ] \text{CrossEntropy}=-\frac1n\sum_{i=1}^n[y_i\log(\hat{y}_i)+(1-y_i)\log(1-\hat{y}_i)] CrossEntropy=n1i=1n[yilog(y^i)+(1yi)log(1y^i)]
  5. Hinge Loss(合页损失)
    • 用于支持向量机(SVM)分类,鼓励正确的分类并且惩罚错误分类的边界点。
    • 公式为: H i n g e L o s s = max ⁡ ( 0 , 1 − y i y ^ i ) \mathrm{HingeLoss}=\max(0,1-y_i\hat{y}_i) HingeLoss=max(0,1yiy^i)

选择损失函数

选择合适的损失函数是构建机器学习模型的关键步骤之一,它应当反映模型预测错误的严重性,并且与模型的优化目标相一致。例如,在回归任务中,如果异常值的存在需要被考虑,MAE可能比MSE更适合;而在分类任务中,交叉熵损失是标准的选择,因为它鼓励模型输出概率式的预测。

在实际应用中,损失函数的选择还可能受到数据特性和模型结构的影响,有时需要通过实验来确定最合适的损失函数。

梯度下降

梯度下降用于最小化或最大化一个函数(通常是一个损失函数或代价函数)。其基本思想是利用函数的梯度(多变量函数的导数)来确定函数值下降最快的方向,从而逐步迭代地更新参数,直到找到函数的局部最小值或最小值。

梯度下降法在大数据集和高维特征空间中更为实用,因为它只需要每次更新一小部分数据,但可能需要更多的计算时间来达到收敛。在某些直接求解解析解不可行或成本过高时使用梯度下降法。

梯度下降中的目标函数还是使用均方误差,求其最小值,但为了计算方便(平方求导后消掉),让其除以2n:

梯度下降中的目标函数还是使用均方误差,求其最小值,但为了计算方便,让其除以2n:

J ( θ 0 , θ 1 ) = 1 2 n ∑ i = 1 n ( y i − ( θ 0 + θ 1 x i ) ) 2 \begin{aligned}J(\theta_0,\theta_1)&=\frac{1}{2n}\sum_{i=1}^n(y_i-(\theta_0+\theta_1x_i))^2\end{aligned} J(θ0,θ1)=2n1i=1n(yi(θ0+θ1xi))2

先初始化两个参数(任意值或者进行预训练),然后计算梯度:

∂ J ∂ θ 0 = − 1 n ∑ i = 1 n ( y i − ( θ 0 + θ 1 x i ) ) ∂ J ∂ θ 1 = − 1 n ∑ i = 1 n ( y i − ( θ 0 + θ 1 x i ) ) ⋅ x i \begin{aligned}\frac{\partial J}{\partial\theta_0}&=-\frac1n\sum_{i=1}^n(y_i-(\theta_0+\theta_1x_i))\\\\\frac{\partial J}{\partial\theta_1}&=-\frac1n\sum_{i=1}^n(y_i-(\theta_0+\theta_1x_i))\cdot x_i\end{aligned} θ0Jθ1J=n1i=1n(yi(θ0+θ1xi))=n1i=1n(yi(θ0+θ1xi))xi

更新参数:

θ 0 : = θ 0 − α × 1 n ∑ i = 1 n ( y i − ( θ 0 + θ 1 x i ) ) θ 1 : = θ 1 − α × 1 n ∑ i = 1 n ( y i − ( θ 0 + θ 1 x i ) ) ⋅ x i \begin{aligned}\theta_0&:=\theta_0-\alpha\times\frac1n\sum_{i=1}^n(y_i-(\theta_0+\theta_1x_i))\\\\\theta_1&:=\theta_1-\alpha\times\frac1n\sum_{i=1}^n(y_i-(\theta_0+\theta_1x_i))\cdot x_i\end{aligned} θ0θ1:=θ0α×n1i=1n(yi(θ0+θ1xi)):=θ1α×n1i=1n(yi(θ0+θ1xi))xi

重复更新参数直到满足停止条件(例如,损失函数几乎不再降低或达到预设的最大迭代次数)。

【代码示例】

# 梯度下降算法
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-1, 6, 141)
y = (x - 2.5) ** 2 - 1

plt.plot(x ,y)
plt.figure()
plt.show()

def dj(theta):  # 求导
    return 2 * (theta - 2.5)
def J(theta): # 损失函数
    return (theta-2.5) ** 2 - 1

theta = 0.0 # 初始化参数
epsilon = 1e-8  # 阈值
eta = 0.1 # 下降的步长
history_theta = [] # 保存历史参数
while True:
    gradient = dj(theta) # 梯度
    last_theta = theta
    history_theta.append(theta)
    theta = theta - eta * gradient
    if (abs(J(theta) - J(last_theta)) < epsilon): # 两次迭代损失函数变化小于阈值
        break
plt.plot(x, J(x))
plt.plot(np.array(history_theta), J(np.array(history_theta)), 'r', marker='+')
plt.show()
plt.show()

运行结果:

在这里插入图片描述

归一化

在有多个特征的情况下,为了达到好的拟合效果,通常是变化范围大的参数小,变化范围小的参数大,这样的参数设置会让梯度下降的时候参数都集中在同一个区域,形成一个椭圆,椭圆在进行梯度下降的时候会在较短轴的方向上快速移动,而在较长轴的方向上缓慢移动,导致迭代路径呈现锯齿状,效率低下。这是因为椭圆形等高线意味着在某些方向上需要较小的学习率,而在其他方向上则需要较大的学习率,选择一个单一的学习率来适应所有方向是很困难的。如下图所示

在这里插入图片描述

使用归一化对数据进行缩放可以达到更好的梯度下降效果,归一化可以在训练过程中维持各层输出的稳定分布,从而减少梯度消失或爆炸的问题。

在这里插入图片描述

最小最大归一化 (Min-Max Scaling): X n o r m = X − X min ⁡ X max ⁡ − X min ⁡ X_{{\mathrm{norm}}}=\frac{X-X_{\min}}{X_{\max}-X_{\min}} Xnorm=XmaxXminXXmin

Z-Score标准化 (Standardization) X s t d = X − μ σ X_{\mathrm{std}}=\frac{X-\mu}{\sigma} Xstd=σXμ

梯度下降中学习率的选择

在使用梯度下降法的时候,学习率α的选择至关重要,α过大可能导致损失函数不能正常下降,α过小可能导致损失函数下降太慢,需要很多次迭代才能到到损失函数的收敛。

α过大会出现的情况:

在这里插入图片描述

在这里插入图片描述

通常从一个较小值开始,利用损失函数J的变化趋势,多次尝试找到一个合适的学习率

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1994516.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

有序转化数组(LeetCode)

题目 给你一个已经 排好序 的整数数组 和整数 、 、 。对于数组中的每一个元素 &#xff0c;计算函数值 &#xff0c;请 按升序返回数组 。 解题 在时间复杂度为解决问题 def sortTransformedArray(nums, a, b, c):def f(x):return a * x * x b * x cn len(nums)result…

配置Mysql的慢查询日志

一、什么是Mysql慢查询日志 MySQL慢查询日志是MySQL数据库自带的一个功能&#xff0c;用于记录执行时间超过指定阈值的SQL语句&#xff0c;以便于后续的性能优化工作 帮助开发和DBA发现哪些SQL语句需要优化&#xff0c;在哪些地方需要修改&#xff0c;以提高数据库的性能 默认…

【Hot100】LeetCode—51. N 皇后

原题链接&#xff1a;51. N 皇后 1- 思路 使用回溯的方式实现&#xff0c;回溯三部曲 数据结构&#xff1a;定义三维数组&#xff0c;收集结果1- 回溯终止条件&#xff1a;如果遍历到 row n-1 此时就是结果收集的时刻2- 执行 for 循环遍历&#xff0c;执行递归和回溯 2- 实现…

【Linux】系列入门摘抄笔记-3-系统管理、显示相关命令

系统管理、显示相关命令 shutdown/关机和重启 sync 数据同步:把内存中的数据强制向硬盘中保存。不放心的话,应该在关机或重启之前手工执行几次,避免数据丢失。 shutdown [选项] 时间 [警告信息] shutdown -h now shutdown -h 05:30 shutdown -h 5 (5分钟后关机)reb…

计算机毕业设计选题推荐-视频点播系统-Java/Python项目实战

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

ubuntu安装微信

ubuntu安装微信 微信特性 可以截图无聊天乱码 安装指南 输入下面命令 wget -c -O atzlinux-v12-archive-keyring_lastest_all.deb https://www.atzlinux.com/atzlinux/pool/main/a/atzlinux-archive-keyring/atzlinux-v12-archive-keyring_lastest_all.debsudo apt -y insta…

全国不动产登记技能竞赛有哪些奖项

&#xff08;一&#xff09;个人综合奖 个人综合奖在参加代表展示的选手中产生。 1&#xff0e;对获得全国决赛第1名的选手&#xff0c;符合条件的&#xff0c;按程序向中华全国总工会推荐申报“全国五一劳动奖章”。 2&#xff0e;对获得全国决赛前15名的选手&#xff0c;由竞…

【Vue】vue3中通过自定义指令实现数字的动态增加动画

在Vue 3中通过自定义指令实现数字的动态增加动画&#xff0c;可以利用Vue的自定义指令功能&#xff0c;这允许你扩展Vue的内置指令&#xff0c;使得DOM操作更加灵活和强大。以下是如何创建一个自定义指令来实现数字动态增加动画的步骤&#xff1a; 效果演示 代码实现 1、定义指…

四种推荐算法——Embedding+MLP、WideDeep、DeepFM、NeuralCF

一、EmbeddingMLP模型 EmbeddingMLP 主要是由 Embedding 部分和 MLP 部分这两部分组成&#xff0c;使用 Embedding 层是为了将类别型特征转换成 Embedding 向量&#xff0c;MLP 部分是通过多层神经网络拟合优化目标。——用于广告推荐。 Feature层即输入特征层&#xff0c;是模…

【C++】string类——模拟实现

&#x1f680;个人主页&#xff1a;奋斗的小羊 &#x1f680;所属专栏&#xff1a;C 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 前言&#x1f4a5;1、string类主要函数接口&#x1f4a5;2、string类的模拟实现&#x1f4a5;2.1 构造和析构…

【Material-UI】FormGroup 组件:多选框分组的最佳实践详解

文章目录 一、FormGroup 组件概述1. 组件介绍2. 组件的基本结构 二、FormGroup 的关键特性1. 逻辑分组2. 状态管理3. 错误处理 三、FormGroup 的实际应用场景1. 多选项管理2. 逻辑验证3. 用户偏好设置4. 表单提交 四、注意事项1. 无障碍支持2. 样式定制 五、总结 在 Material-U…

AWVS下载安装使用教程图文教程(超详细)

《网络安全自学教程》 AWVS&#xff08;Acunetix Web Vulnerability Scanner&#xff09;是一款常用的Web网站漏洞扫描工具。 AWVS扫描时&#xff0c;对数据库有增删改的操作&#xff0c;部分渗透项目禁止使用&#xff0c;在实际环境中需要注意。 这篇文章使用 Windows Serve…

30个UI设计师应该掌握的专业术语

每个领域都有自己的专有名词和术语&#xff0c;掌握它们才能更好地和工作伙伴沟通。作为一名资深UI设计师&#xff0c;我整理了以下30个UI设计师应该掌握的专业术语&#xff0c;希望能帮助大家更好地理解和运用这些概念。 这些术语包含三大类&#xff1a;基础名词、常用UI设计…

藏品管理系统的流程

1、文物征集&#xff1a; - 通过购买、捐赠、交换、考古发掘等方式征集文物。 征集过程中需遵守国家法律法规和相关规定。 2、文物鉴定&#xff1a; - 对新发现的文物和征集的文物进行专业鉴定&#xff0c;确定其是否具有历史、艺术、科学价值。 3、 文物登记&…

【吊打面试官系列-Elasticsearch面试题】详细描述一下 Elasticsearch 索引文档的过程?

大家好&#xff0c;我是锋哥。今天分享关于 【详细描述一下 Elasticsearch 索引文档的过程?】面试题&#xff0c;希望对大家有帮助&#xff1b; 详细描述一下 Elasticsearch 索引文档的过程? 协调节点默认使用文档 ID 参与计算&#xff08;也支持通过 routing&#xff09;&am…

个人经典例程与研究方向总目录

&#x1f381; 私信可获得仿真数据、论文与建模的仿真定制 &#x1f447; 订阅本人任意付费专栏的朋友&#xff0c;均可私信&#xff0c;免费获取一维EKF/UKF的MATLAB例程 目前的研究方向 1 导航与定位 卡尔曼滤波跟踪、二维三维轨迹计算、平面立体目标跟踪、 2 智能算法方面…

顶顶通手机助手拦截方案

现在很多品牌的手机&#xff0c;都自带语音助手&#xff0c;比如我用的是小米手机&#xff0c;就自带小爱助手&#xff0c;可以自动接听各种广告营销电话。如果来电号码被标记为广告营销&#xff0c;小爱助手就会自动应答&#xff0c;然后模拟真人进行对话。 现在自动外呼系统拨…

二次注入(sql靶场第24关+网鼎杯comment二次注入+网鼎杯-2018-Web-Unfinish)

目录 二次注入 sql靶场第24关 网鼎杯comment二次注入 网鼎杯-2018-Web-Unfinish 二次注入 sql靶场第24关 二次注入我觉得是特别有意思&#xff0c;首先依然是查看页面 可以看出来这一关十分的丰富&#xff0c;可以注册&#xff0c;修改和登录&#xff0c;那我们先试着注册…

工地云SaaS系统,通过物联网与可视化等先进技术的综合应用,搭建的智慧工地管理云平台源码

通过物联网与可视化等先进技术的综合应用&#xff0c;搭建智慧工地管理云平台。以绿色、安全施工管理为主线&#xff0c;从人员、设备、环境、监控#度管理、施工管理、工程管理等多个维度对现场要素进行信息化&#xff0c;实现数据实时更新、人员精确管理、风险及时预警、管理便…

六,业务功能:登录

六&#xff0c;业务功能&#xff1a;登录 文章目录 六&#xff0c;业务功能&#xff1a;登录编写 AuthController 作为登录控制器编写 EmpService 业务处理编写 target.html 登录成功页面显示启动 Tomcat 服务器&#xff0c;运行测试 编写 AuthController 作为登录控制器 在 d…