深度学习神经网络常用损失函数

  • 损失函数--Loss Function
    • 1. MSE--均方误差损失函数
    • 2. CEE--交叉熵误差损失函数
    • 3. mini-batch版交叉熵误差损失函数

损失函数–Loss Function

  • 损失函数
  是用来度量模型的预测值与真实值的差异(损失值)程度的一类运算函数,是衡量神经网络性能“恶劣程度”的指标。是一个非负实值函数,损失函数计算值越小 ,模型性能越好

1. MSE–均方误差损失函数

均方误差(MSE,Mean Squared Error):
  即目标变量与预测值之间距离平方之和,度量样本点到回归曲线的距离,通过最小化平方损失使样本点可以更好地拟合回归曲线

数学公式

M S E = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 {MSE={1\over n} \sum_{i=1}^n{(y_i - \hat y_i)^2}} MSE=n1​i=1∑n​(yi​−y^​i​)2
y i {y_i} yi​是真实值, y ^ i {\hat y_i} y^​i​预测值

  1. MSE 通常用于回归问题的损失函数
  2. 计算成本低,无参数
  • 实现代码
import numpy as np
def mean_squared_error(y, t):# y神经网络的输出,t监督数据return 0.5*np.sum((y - t)**2)if __name__ == '__main__':# 正确值为6y = np.array([0.01, 0.05, 0.08, 0.21, 0.52, 0.012, 0.6, 0.04, 0.12, 0.09])# 6的位置t = np.array([0, 0, 0, 0, 0, 0, 1, 0, 0, 0])# 错误值(9)t1 = np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 1])print("--" * 30)print("预测正确时的均方误差:", mean_squared_error(y, t), "(值越小越好)")print("预测错误时的均方误差:", mean_squared_error(y, t1), "(损失值增大了)")print("--" * 30)

2. CEE–交叉熵误差损失函数

熵  熵在不同的学科中所涉及不同的方面(物理学:热力学第二定律熵增原理;经济学:信息熵、条件熵、联合熵等;哲学:泛熵),总的来说熵就是混乱,混乱程度的表述。

信息熵:描述信息发生的平均不确定性程度(信息量的期望)
   信息论之父 C. E. Shannon 在 1948 年发表的论文“通信的数学理论( A Mathematical Theory of Communication )”中指出,任何信息都存在冗余,冗余大小与信息中每个符号(数字、字母或单词)的出现概率或者说不确定性有关,香农认为“信息是用来消除随机不确定性的东西”。即基本作用就是消除人们对事物的不确定性,信息熵就越高,信息量(混乱度)越大(我们需要把它弄清楚所需的信息量就越大)。
交叉熵误差损失函数(CrossEntropy Loss):
   在机器学习和神经网络深度学习中表示真实概率分布与预测概率分布之间的差异。衡量同一个随机变量中的两个不同概率分布的差异程度。
   在深度学习中交叉熵误差损失函数的值越小,训练的模型拟合效果就越好。
  1. 可以真实的反应出真实结果和预测结果的误差
  2. 交叉熵误差函数和激活函数softmax、sigmoid(的复合函数是凸函数
    即存在全局最优解)

数学公式

H ( p , q ) = − ∑ i = 1 n p ( x i ) l o g p ( x i ) {H(p,q)=- \sum_{i=1}^n{p(x_i)\ log\ p(x_i)}} H(p,q)=−i=1∑n​p(xi​) log p(xi​)
q ( x i ) {q(x_i)} q(xi​)(非真实分布)要传递的信息, p ( x i ) {p(x_i)} p(xi​)(真实分布)传递信息的方式
神经网络(机器学习)中 E = − ∑ i y i l o g ( y ^ i ) {E=- \sum_{i}{y_i log( \hat y_i)}} E=−∑i​yi​log(y^​i​)

  • 实现代码
import numpy as np
def cross_entropy_error(y, t):# 为了防止出现负无限大的-inf,需要加上一个微小值(1e-7十的负七次方)delta = 1e-7return -np.sum(t * np.log(y + delta))if __name__ == '__main__':# 正确值为6(one-hot独热编码表示)y = np.array([0.01, 0.05, 0.08, 0.21, 0.52, 0.012, 0.6, 0.04, 0.12, 0.09])# 6的位置t = np.array([0, 0, 0, 0, 0, 0, 1, 0, 0, 0])# 错误值(9)t1 = np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 1])print("正确时的交叉熵误差:", cross_entropy_error(y, t))print("错误时的交叉熵误差:", cross_entropy_error(y, t1))print("--" * 30)

#mermaid-svg-xF3McONrJo4P2qZI {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-xF3McONrJo4P2qZI .error-icon{fill:#552222;}#mermaid-svg-xF3McONrJo4P2qZI .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-xF3McONrJo4P2qZI .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-xF3McONrJo4P2qZI .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-xF3McONrJo4P2qZI .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-xF3McONrJo4P2qZI .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-xF3McONrJo4P2qZI .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-xF3McONrJo4P2qZI .marker{fill:#333333;stroke:#333333;}#mermaid-svg-xF3McONrJo4P2qZI .marker.cross{stroke:#333333;}#mermaid-svg-xF3McONrJo4P2qZI svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-xF3McONrJo4P2qZI .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-xF3McONrJo4P2qZI .cluster-label text{fill:#333;}#mermaid-svg-xF3McONrJo4P2qZI .cluster-label span{color:#333;}#mermaid-svg-xF3McONrJo4P2qZI .label text,#mermaid-svg-xF3McONrJo4P2qZI span{fill:#333;color:#333;}#mermaid-svg-xF3McONrJo4P2qZI .node rect,#mermaid-svg-xF3McONrJo4P2qZI .node circle,#mermaid-svg-xF3McONrJo4P2qZI .node ellipse,#mermaid-svg-xF3McONrJo4P2qZI .node polygon,#mermaid-svg-xF3McONrJo4P2qZI .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-xF3McONrJo4P2qZI .node .label{text-align:center;}#mermaid-svg-xF3McONrJo4P2qZI .node.clickable{cursor:pointer;}#mermaid-svg-xF3McONrJo4P2qZI .arrowheadPath{fill:#333333;}#mermaid-svg-xF3McONrJo4P2qZI .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-xF3McONrJo4P2qZI .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-xF3McONrJo4P2qZI .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-xF3McONrJo4P2qZI .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-xF3McONrJo4P2qZI .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-xF3McONrJo4P2qZI .cluster text{fill:#333;}#mermaid-svg-xF3McONrJo4P2qZI .cluster span{color:#333;}#mermaid-svg-xF3McONrJo4P2qZI div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-xF3McONrJo4P2qZI :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}

数学期望
各信息量乘其发生概率
求和
系统信息量期望值

注: y的值越接近1,预测结果和真实分类结果越接近;交叉熵误差越接近0, 即误差越小,两个概率分布越接近,拟合结果越好

3. mini-batch版交叉熵误差损失函数

mini-batch版交叉熵误差损失函数:
  不仅适用于one-hot格式的监督数据(one-hot表示中t为0的元素的交叉熵误差也为0,因此针对这些元素的计算可以忽略),且适用于其他数据。当 y的维度为1时,即求单个数据的交叉熵误差(需要改变数据的形状)。
np.arange(batch_size):生成一个从0到batch_size-1的数组
y[np.arange(batch_size), t]:获取各个数据的正确解标签对应的神经网络的输出
  • 实现代码
import numpy as np
def Mini_cross_entropy_error(y, t):# 确保仅有一组数据if y.ndim == 1:# 将一维数组的第一维转化到第二维y = y.reshape(1, y.size)t = t.reshape(1, t.size)# 个数相同则获取最值if y.size == t.size:# 获取正确值标签t = t.argmax(axis=1)# 获取(转化后)第一维,表示数据组数batch_size = y.shape[0]return -np.sum(t * np.log(y[np.arange(batch_size), t] + 1e-7)) / batch_sizeif __name__ == '__main__':# one-hot数据y_one_hot = np.array([[0, 0, 0, 0.99, 0, 0, 0, 0.1, 0, 0],[0, 0, 0.1, 0.8, 0, 0, 0, 0.99, 0, 0]])t_one_hot = np.array([[0, 0, 0, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0]])result_one_hot = Mini_cross_entropy_error(y_one_hot, t_one_hot)print("损失值:", result_one_hot)# 一般数据y = np.array([[0, 0, 0, 0.9, 0, 0, 0, 0.1, 0, 0],[0, 0, 0.1, 0.8, 0, 0, 0, 0.9, 0, 0]])t = np.array([[1, 5, 2, 8, 2, 3, 6, 5, 4, 3], [3, 6, 5, 4, 1, 2, 6, 9, 4, 2]])result = Mini_cross_entropy_error(y, t_one_hot)print("损失值:", result)/ batch_size

神经网络常用损失函数Loss Function相关推荐

  1. python如何画损失函数图_Pytorch 的损失函数Loss function使用详解

    1.损失函数 损失函数,又叫目标函数,是编译一个神经网络模型必须的两个要素之一.另一个必不可少的要素是优化器. 损失函数是指用于计算标签值和预测值之间差异的函数,在机器学习过程中,有多种损失函数可供选 ...

  2. 损失函数(Loss function)、代价函数(成本函数)(Cost function)、目标函数(objective function)的区别与联系

    基本概念: 损失函数(Loss function):计算的是一个样本的误差. 损失函数是定义在单个训练样本上的,也就是就算一个样本的误差,比如我们想要分类,就是预测的类别和实际类别的区别,是一个样本的 ...

  3. 损失函数(Loss function) 和 代价函数(Cost function)

    1损失函数和代价函数的区别: 损失函数(Loss function):指单个训练样本进行预测的结果与实际结果的误差. 代价函数(Cost function):整个训练集,所有样本误差总和(所有损失函数 ...

  4. smoothl1函数_Faster RCNN的损失函数(Loss Function)

    Faster RCNN的损失函数(Loss Function)的形式如下: : Anchor[i]的预测分类概率: Anchor[i]是正样本时, :Anchor[i]是负样本时, ; 什么是正样本与 ...

  5. [概念]医学图像分割中常用的Loss function(损失函数) + 从loss处理图像分割中类别极度不均衡

    目录 一.前言 二.损失函数 2.1 根据像素正确与否设计的loss function 2.1.1  Log Loss 2.1.2 WCE Loss 2.1.3 Focal Loss 2.2 根据评测 ...

  6. 经验 | 深度学习中常见的损失函数(loss function)总结

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作分享,不代表本公众号立场,侵权联系删除 转载于:机器学习算法与自然语言处理出品    单位 | 哈工大SCIR实 ...

  7. 交叉熵损失函数优缺点_【损失函数】常见的损失函数(loss function)总结

    阅读大概需要7分钟 跟随小博主,每天进步一丢丢 机器学习算法与自然语言处理出品 @公众号原创专栏作者 yyHaker 单位 | 哈工大SCIR实验室 损失函数用来评价模型的预测值和真实值不一样的程度, ...

  8. 损失函数Loss Function

    简介 损失函数(loss function)或代价函数(cost function)是将随机事件或其有关随机变量的取值映射为非负实数以表示该随机事件的"风险"或"损失&q ...

  9. 损失函数(Loss Function) -1

    http://www.ics.uci.edu/~dramanan/teaching/ics273a_winter08/lectures/lecture14.pdf Loss Function 损失函数 ...

最新文章

  1. AngularJS学习笔记一:简单入门
  2. JS基础_使用工厂方法创建对象(了解下就行了,用的不多)
  3. java发送jsp表格邮件_javaweb收发邮件 servler+jsp实现(一)
  4. 最佳约会策略及其证明
  5. PLSQL导入导出表的正确步骤
  6. [HZAU]华中农业大学第四届程序设计大赛网络同步赛
  7. 【Stimulsoft Reports.WPF教程】在代码中使用报表变量
  8. 网易云音乐 网络错误 linux,Linux版网易云音乐播放音乐时无限显示“网络错误”的解决办法...
  9. 京瓷打印机p5026cdn_京瓷ECOSYS P5026cdn驱动
  10. JSFL自动绘画_2_三阶贝塞尔曲线画线
  11. 南京大学计算机有分学硕专硕,南京大学的学硕和专硕有什么区别吗
  12. 计算机快捷操作知识,电脑基本操作知识
  13. Kaggle项目之Mobile App Store
  14. 自动驾驶专题介绍 ———— 动力传动系统
  15. 风场可视化:风场数据
  16. github是什么,有什么用
  17. bootsqm.dat是什么文件 bootsqm.dat可以删除吗
  18. 当代年轻人熬夜晚睡的原因找到了!
  19. 羧基/羟基/氨基/巯基/环氧基/磺酸/胺基/苯基官能团化二氧化硅微球制备研究过程
  20. 如何搭建https代理?

热门文章

  1. 2022-06-17:virtualBox虚拟机联网
  2. currency symobl
  3. ACM常用技巧之尺取法--POJ3061/3320/2739/2100
  4. 【Eletron】解决electron安装,卡在install.js不动的问题,UnhandledPromiseRejectionWarning: RequestError: read ECONNRE
  5. 入伏从哪天算起比较准确性_2020入伏从哪天算起
  6. python的pygame模块详解_python游戏模块学习之pygame常规操作讲解
  7. 如何下载最新版eclipse
  8. 阿里P7亲自教你!2021最新中高阶Android面试题总结,帮你突破瓶颈
  9. C语言常用功能函数集合
  10. 2017PHP学习路线图