深度学习(二)-损失函数+梯度下降

news2024/11/13 10:31:19

损失函数

损失函数(Loss Function),也有称之为代价函数(Cost Function),用来度量预测值和实际值之间的差异。

损失函数的作用

  • 度量决策函数f(x)和实际值之间的差异。
  • 作为模型性能参考。损失函数值越小,说明预测输出和实际结果(也称期望 输出)之间的差值就越小,也就说明我们构建的模型越好。学习的过程,就 是不断通过训练数据进行预测,不断调整预测输出与实际输出差异,使的损失值最小的过程。

常用损失函数

均方误差
均方误差(Mean square error)损失函数。均方误差是 回归问题常用的损失函数 ,它是预测值与目标值之间差值的平方和,其公式和图像如下所示:
 
为什么使用误差的平方
曲线的最低点是可导的
越接近最低点,曲线的坡度逐渐放缓,有助于通过当前的梯度来判断接近最低点的程 度(是否逐渐减少步长,以免错过最低点)

 
交叉熵
交叉熵(Cross Entropy)。交叉熵是Shannon信息论中一个重要概念,主要用于度量两个概率分布间的差异性信息,在机器学习中用来作为分类问题的损失函数。假设有两个概率分布,tk与yk ,其交叉熵函数公式及图形如下所示:
模拟计算交叉熵
import numpy as np

y_true =  [0  ,0  ,0  ,1  ,0]
pred_y1 = [0.1,0.1,0.1,0.6,0.1]
pred_y2 = [0.1,0.1,0.05,0.7,0.05]
pred_y3 = [0.01,0.02,0.03,0.8,0.05]


total1,total2,total3 = 0,0,0 
for i in range(len(y_true)):
    total1 += y_true[i] * np.log(pred_y1[i])
    total2 += y_true[i] * np.log(pred_y2[i])
    total3 += y_true[i] * np.log(pred_y3[i])

total1,total2,total3 = -total1,-total2,-total3 

print('交叉熵1:',total1)
print('交叉熵2:',total2)
print('交叉熵3:',total3)

注意:交叉熵越小越好

梯度下降

梯度(gradient)是一个向量(矢量,有方向),表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大。损失函数沿梯度相反方向收敛最快(即能最快找到极值点)。当梯度向量为零(或接近于零),说明损失函数到达一个极小值点,模型准确度达到一个极大值点。

通过损失函数,我们将“寻找最优参数”问题,转换为了“寻找损失函数 最小值”问题。
寻找步骤:
(1)损失是否足够小?如果不是,计算损失函数的梯度。
(2)按梯度的反方向走一小步,以缩小损失。
(3)循环到(1)。
这种按照负梯度不停地调整函数权值的过程就叫作“ 梯度下降法 ”。通过这样的方法, 改变每个神经元与其他神经元的连接权重及自身的偏置,让损失函数的值下降得更快, 进而将值收敛到损失函数的某个极小值。

导数

所谓导数,就是用来分析函数“变化率”的一种度量。其公式为:

导数的含义:反映变化的剧烈程度(变化率)

偏导数

“偏导”的英文本意是“partial derivatives“(表示局部导数)。对于多维变量函数而言,当求某个变量的导数时,就是把其他变量视为常量,然后对整个函数求其导数 (相比于全部变量,这里只求一个变量,即为“局部”)。例如有函数:

学习率

学习率是梯度下降过程中,在梯度值前面的系数,用来控制调整的步幅大小

梯度递减训练法则

神经网络中的权值参数是非常多的,因此针对损失函数E的权值向量的梯度如以下公 式所示:

注意中间是恒等于。

批量梯度下降
批量梯度下降法(Batch Gradient Descent,BGD)是最原始的形式,它是指在每一次迭代时使用所有样本来进行梯度的更新。
  • 优点:
  1. 一次迭代是对所有样本进行计算,此时利用矩阵进行操作,实现了并行。
  2. 由全数据集确定的方向能够更好地代表样本总体,从而更准确地朝向极值所在的方向。 当目标函数为凸函数时,BGD一定能够得到全局最优。
  • 缺点:
  1. 当样本数目 m 很大时,每迭代一步都需要对所有样本计算,训练过程会很慢。

随机梯度下降
随机梯度下降法(Stochastic Gradient Descent,SGD)每次迭代使用一个样本来对参数进行更新,使得训练速度加快。
  • 优点:
  1. 由于不是在全部训练数据上的损失函数,而是在每轮迭代中,随机优化某一条训练数据上的损失函数,这样每一轮参数的更新速度大大加快。
  • 缺点:
  1. 准确度下降。由于即使在目标函数为强凸函数的情况下,SGD仍旧无法做到线性收敛。
  2. 可能会收敛到局部最优,由于单个样本并不能代表全体样本的趋势。
  3. 不易于并行实现。
小批量梯度下降
小批量梯度下降(Mini-Batch Gradient Descent, MBGD)是对批量梯度下降以及随 机梯度下降的一个折中办法。其思想是:每次迭代 使用指定个(batch_size)样本来对 参数进行更新。
  • 优点:
  1. 通过矩阵运算,每次在一个batch上优化神经网络参数并不会比单个数据慢太多。
  2. 每次使用一个batch可以大大减小收敛所需要的迭代次数,同时可以使收敛到的结果更加接近梯度下降的效果。
  • 缺点:
  1. batch_size的不当选择可能会带来一些问题。
几种梯度下降算法收敛比较
  • 批量梯度下降稳健地向着最低点前进 的
  • 随机梯度下降震荡明显,但总体上向最低点逼近
  • 小批量梯度下降位于两者之间

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

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

相关文章

解耦利器 - Java中的SPI机制

为什么需要SPI机制 SPI和API的区别是什么 SPI是一种跟API相对应的反向设计思想:API由实现方确定标准规范和功能,调用方无权做任何干预; 而SPI是由调用方确定标准规范,也就是接口,然后调用方依赖此接口,第…

数据链路层(MAC地址)

文章目录 数据链路层(MAC地址)1、以太网2、以太网帧格式3、MAC地址4、对比理解 MAC 地址和 IP 地址5、最大传输单元(MTU)6、MTU 对 IP 协议的影响7、MTU 对 UDP 协议的影响8、MTU 对 TCP 协议的影响9、查看硬件地址和 MTU10、ARP …

吉林长春产权交易中心JS逆向:魔改AES请求加密与解密

吉林长春产权交易中心JS逆向:魔改AES请求加密与解密 📚 目录 🎯 抓包分析与加密识别🔍 XHR断点与请求捕获🛠️ 深入栈追踪:s参数生成过程✨ 参数加密方法解析:encode与encryptCode&#x1f504…

【C++】将myString类中能够实现的操作都实现一遍

myString.h #ifndef MYSTERAM_H #define MYSTERAM_H #include <iostream> #include<cstring> using namespace std; class myString { private:char *str; //字符串int size; //字符串容量char error[20] "error"; public://无参构造myString():siz…

23 - 模块独立编译的支持

---- 整理自狄泰软件唐佐林老师课程 文章目录 1. 模块独立编译的支持1.1 问题1.2 背景1.3 解决方案1.4 关键技术点 2. makefile 中的代码复用3. 实验 1. 模块独立编译的支持 1.1 问题 一般而言&#xff0c;不同工程师负责不同模块的开发&#xff0c;编译环境中如何支持模块的…

【计算机网络复习资料】

自己整理的&#xff0c;是根据我们学院老师所说重点&#xff0c;请自行甄别。 一、简答题&#xff1a; 计算机网络&#xff1a;由若干节点和连接这些节点的链路组成。 计算机网络体系结构&#xff1a;计算机网络的各层及其协议的集合。 tcp/ip体系结构&#xff1a;五个层次…

14 大模型微调-KitTrain

1 介绍 如何降低占用的显存&#xff1a; 梯度累计&#xff1a;在一个完整的模型更新周期&#xff08;epoch&#xff09;中&#xff0c;将多个小批量&#xff08;mini-batches&#xff09;的数据的梯度进行累加&#xff0c;然后在一个较大的批量&#xff08;累积步数&#xff…

MYSQL基础练习题 619.只出现一次的最大数字 (力扣)

619.单一数字 是在 MyNumbers 表中只出现一次的数字。 找出最大的 单一数字 。如果不存在 单一数字 &#xff0c;则返回 null 题目链接&#xff1a; https://leetcode.cn/problems/biggest-single-number/ 建表插入数据&#xff1a; Create table If Not Exists MyNumber…

4个方法快速恢复电脑删除文件

随着电脑的普及&#xff0c;我们越来越多地将重要数据存储在电脑中。然而&#xff0c;数据丢失的风险也随之增加。当您意外删除文件、格式化硬盘或遇到系统崩溃等情况时&#xff0c;如何恢复丢失的数据成为了一个待解决的问题。 一、回收站恢复 首先&#xff0c;最简单的恢复方…

心理咨询展示型网站渠道拓展服务

心理问题长期以来都受到关注&#xff0c;每个城市里也都有相关服务商家&#xff0c;除了进店外&#xff0c;线上也可以开展咨询服务&#xff0c;对需求者来说需要找到靠谱的品牌&#xff0c;而商家也需要触达到更多客户获取转化。 网站是品牌线上工具&#xff0c;利于商家通过…

搭建nmt部署考试系统

搭建nmt nginx --下载镜像&#xff0c;启动镜像&#xff0c;将本地的dist项目的目录挂载在容器的/usr/share/nginx/html --启动服务 --前后端分离的项目&#xff0c;并非所有的请求都是来自与同一个位置&#xff0c;设置请求的时候还是需要在hosts文件中挟持域名 --域名是…

如何通过选择合适的编程工具来提升编程效率

前言 在现代软件开发中&#xff0c;选择合适的编程工具和环境至关重要&#xff0c;它们能够帮助开发者大幅提升工作效率、代码质量和项目管理水平。对于许多程序员来说&#xff0c;编程工具不仅仅是一个简单的编辑器&#xff0c;而是一个综合性的开发环境&#xff0c;可以优化…

[Doc][px4][ros2][gazebo][yolov8]PX4-ROS2-Gazebo-YOLOv8

GIT地址&#xff1a;Https://github.com/monemati/PX4-ROS2-Gazebo-YOLOv8 apt install python3.8-venv Create a virtual environment # create python -m venv /home/xg/px4-venv# activate source /home/xg/px4-venv/bin/activate Clone repository git clone https://g…

【实用干货】5大自动化测试的Python框架!

自从2018年被评选为编程语言以来&#xff0c;Python在各大排行榜上一直都是名列前茅。 目前&#xff0c;它在Tiobe指数中排名第三个&#xff0c;仅次于Java和C。随着该编程语言的广泛使用&#xff0c;基于Python的自动化测试框架也应运而生&#xff0c;且不断发展与丰富。 因…

博客园-awescnb插件-geek皮肤优化-表情配置

&#x1f496;简介 博客园-awescnb插件-geek皮肤下&#xff0c;表情配置及优化 &#x1f517;链接 官方配置&#xff1a;https://www.yuque.com/awescnb/user/rycpvv#KwRr4 官方配置文档 在线Emoji&#xff1a;https://tool.itzd.cn/ 在线获取Emoji表情 &#x1f527;配置 …

「Python程序设计」基本数据类型:字典

在python编程语言中&#xff0c;字典是一个名值对的组合的集合。也就是说&#xff0c;字典中的数据元素&#xff0c;都是通过名称和数值的形式出现的。字典这种数据结构&#xff0c;类似于C语言中的struct结构体&#xff0c;以及json数据格式类型。 字典的数据结构特性&#x…

MySQL第10讲--约束的介绍

文章目录 前言约束约束的演示 外键约束删除外键外键删除/更新行为 前言 在第9讲MySQL第9讲–函数的介绍中我们主要介绍了几种mysql的内置函数&#xff1a;字符串函数、数值函数、流程函数、日期函数&#xff0c;并对这些函数中常用的几种函数做了总结&#xff0c;如下图所示&am…

多层数组的formdata格式提交处理

一、数据结构 二、主要代码 for (var i 0; i < this.addProjectContentReqList.length; i) {formData.append(addProjectContentReqList[ i ].contentText, this.addProjectContentReqList[i].contentText);for (var k 0; k < this.addProjectContentReqList[i].co…

《深入理解JAVA虚拟机(第2版)》- 第7章 - 学习笔记

第7章 虚拟机类加载机制 7.1 概述 类的加载机制是&#xff1a;虚拟机将描述类的数据从Class文件中读取到内存中&#xff0c;再对这些数据进行检验、转换解析、初始化&#xff0c;最终生成一个可以被虚拟机直接使用的数据类型。之所以称Java是动态加载和动态连接&#xff0c;是…

如何在Windows系统上安装和配置Git客户端

&#x1f600;前言 在这篇博文中&#xff0c;我将为大家介绍如何在Windows系统上安装和配置Git客户端&#xff0c;包括Git for Windows和TortoiseGit。这些工具是进行版本控制管理的必备工具&#xff0c;特别适合开发者在日常工作中使用。通过这篇文章&#xff0c;您将学会如何…