当前位置: 首页 > news >正文

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

损失函数

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

损失函数的作用

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

常用损失函数

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

 
交叉熵
交叉熵(Cross Entropy)。交叉熵是Shannon信息论中一个重要概念,主要用于度量两个概率分布间的差异性信息,在机器学习中用来作为分类问题的损失函数。假设有两个概率分布,tk与yk ,其交叉熵函数公式及图形如下所示:
模拟计算交叉熵
import numpy as npy_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的不当选择可能会带来一些问题。
几种梯度下降算法收敛比较
  • 批量梯度下降稳健地向着最低点前进 的
  • 随机梯度下降震荡明显,但总体上向最低点逼近
  • 小批量梯度下降位于两者之间

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【数据结构】-----哈希
  • 【科研新手必备】如何高效、高质量、科学的科研?
  • 仿论坛项目--第二部分习题
  • JAVA进阶学习14
  • RuoYi-Cloud 部署与配置 [CentOS7]
  • 《深入浅出WPF》读书笔记.8路由事件
  • 使用pgrs在wsl中为postgres写拓展
  • huggingface.co 无法访问问题换源解决
  • c++修炼之路之C++11
  • Mac/Linux系统matplotlib中文支持问题
  • Java中类的成员介绍
  • 设计模式-结构性模式
  • Elasticsearch 里的父子文档插入和查询
  • upload-labs通关攻略
  • jetson orin nx安装todesk
  • ➹使用webpack配置多页面应用(MPA)
  • eclipse的离线汉化
  • ECMAScript6(0):ES6简明参考手册
  • gcc介绍及安装
  • Git 使用集
  • js作用域和this的理解
  • k个最大的数及变种小结
  • leetcode讲解--894. All Possible Full Binary Trees
  • npx命令介绍
  • PHP面试之三:MySQL数据库
  • python 学习笔记 - Queue Pipes,进程间通讯
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • Vue 2.3、2.4 知识点小结
  • vue中实现单选
  • 构建二叉树进行数值数组的去重及优化
  • 检测对象或数组
  • 前端自动化解决方案
  • 区块链分支循环
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 思维导图—你不知道的JavaScript中卷
  • 微信开源mars源码分析1—上层samples分析
  • 译米田引理
  • 如何在招聘中考核.NET架构师
  • ​ssh免密码登录设置及问题总结
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • #、%和$符号在OGNL表达式中经常出现
  • #HarmonyOS:基础语法
  • (11)MSP430F5529 定时器B
  • (3)llvm ir转换过程
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (Java入门)抽象类,接口,内部类
  • (Oracle)SQL优化基础(三):看懂执行计划顺序
  • (PySpark)RDD实验实战——取最大数出现的次数
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (三)Kafka离线安装 - ZooKeeper开机自启
  • (十三)Flask之特殊装饰器详解
  • (一)SvelteKit教程:hello world
  • (转)母版页和相对路径