一、起因与目的

写这篇文章的起因,就是网络上查了很多NLLLoss(Negative Log-Likelihood Loss,负对数似然损失)相关的详解,但是要么没有讲透,要么就是只讲了如何应用。而我看了之后关于其底层是如何计算损失,并使预测值y趋近于target的原理还是不太清楚。自己从二维数学图像的角度小推了一遍,通俗一点,现在记录一下,以供查阅。

参考:Pytorch损失函数torch.nn.NLLLoss()详解 - 百度文库 (baidu.com)https://wenku.baidu.com/view/530c4ccdbbf67c1cfad6195f312b3169a551ea5c.html?_wkts_=1681370161513&bdQuery=NLLLoss%E8%AE%A1%E7%AE%97%E8%AF%A6%E8%A7%A3

二、计算过程概览

首先根据上图,这里假定了网络输出的结果是一个3*3的tensor矩阵,作为本次推导的input。接着先使用softmax输出函数(softmax输出函数将结果映射为总和为1的概率值,详情请自行查阅)对其进行计算,得到一个3*3的矩阵。其代表的含义是对三个样本分别进行样本属于三类中的某一类的概率预测,那么结果自然就是3*3=9个。根据softmax函数的性质,我们可以很容易得出,一个样本分别属于三个样本的概率,且相加值为1.

图2为图解,格式问题数据有位置偏移,理解就行:

"" 然后就是对softmax的结果取对数,做log运算,再接着就是假设标签是[0, 1, 2],第一行取第0个元素,第二行取第1个,第三行取第2个,去掉负号,即[0.3168, 3.3093, 0.4701], 求平均值,就可以得到损失值。"" 如此便是整个计算过程。

这里我们再根据上图来理解,0、1、2分别是样本1、样本2、样本3 的标签,代表他们分别属于类1、类2、类3。那么根据标签取出来的数就代表,经过网络计算后,样本1属于其类1的概率、样本2属于其类2的概率、样本3属于其类3的概率。当然在实际计算中,这步的数据严格来说已经经过了softmax和log函数处理,不算概率,我们知道其对应关系就行。

验证如下图:

​​

过程就是这样,接下来就从数学角度来理解一下。

二、计算过程理解

我们假定网络输出的是x,接下来首先得到的结果就是softmax(x)且由于其结果为概率值,其值域为(0~1)

然后我们知道,NLLLloss函数就是先对softmax(x)的结果取对数,那么结果就是log(softmax(x)),根据log函数和函数图像和softmax(x)的值域,很容易得出其值域为(-∞,0)

再对以上结果取负数,结果为 - log(softmax(x)),容易得知其值域为(0,+∞),接下来再根据其计算过程可以得出其公式:

我们知道网络学习的目的就是降低损失loss,根据等式,loss减小,那么每个 - log(softmax(x))就得减小,根据其图像可知,随着其减小,softmax(x)的值必然增大。由于网络在这个过程中输出的其实就是加了softmax激活函数的softmax(x),就能理解为,训练网络降低NLLLoss的过程中,网络计算出的样本属于其类的概率值越趋近于1。以上,就是我通过降低NLLLoss来训练网络分类任务的理解。

图解如下:

三、细节与思考

1.NLLLoss本身是不带输出函数的,所以在网络中通常需要添加softmax输出函数,通常是softmax,理论上别的输出函数也可以,但别的输出函数与NLLLoss的结合应用我暂时还没见过。

2.理解了NLLLoss之后对于理解CrossEntropyLoss有帮助,其官方文档的说明解释为:softmax(x)+log(x)+nn.NLLLoss====>nn.CrossEntropyLoss

3.观察推导出的损失公式,思考是否可以对每个样本的- log(softmax(x))加上权重,使其效果更好,如何添加合理,应该会是一个有趣的损失函数优化问题。

深度学习关于NLLLoss损失的数学向个人详解相关推荐

  1. 深度学习之目标检测(十一)--DETR详解

    深度学习之目标检测(十一)-- DETR详解 目录 深度学习之目标检测(十一)-- DETR详解 1. 前言 2. DETR 框架 2.1 CNN Backbone 2.2 Transformer E ...

  2. Keras深度学习实战(21)——神经风格迁移详解

    Keras深度学习实战(21)--神经风格迁移详解 0. 前言 1. 神经风格迁移原理 2. 模型分析 3. 使用 Keras 实现神经风格迁移 小结 系列链接 0. 前言 在 DeepDream 图 ...

  3. 笔记 | 百度飞浆AI达人创造营:深度学习模型训练和关键参数调优详解

    笔记 | 百度飞浆AI达人创造营:深度学习模型训练和关键参数调优详解 针对特定场景任务从模型选择.模型训练.超参优化.效果展示这四个方面进行模型开发. 一.模型选择 从任务类型出发,选择最合适的模型. ...

  4. 深度学习模型训练和关键参数调优详解

    深度学习模型训练和关键参数调优详解 一.模型选择 1.回归任务 人脸关键点检测 2.分类任务 图像分类 3.场景任务 目标检测 人像分割 文字识别 二.模型训练 1.基于高层API训练模型 加载数据集 ...

  5. Keras深度学习实战(26)——文档向量详解

    Keras深度学习实战(26)--文档向量详解 0. 前言 1. 文档向量基本概念 2. 神经网络模型与数据集分析 2.1 模型分析 2.2 数据集介绍 3. 利用 Keras 构建神经网络模型生成文 ...

  6. 【深度学习】扩散模型(Diffusion Model)详解

    [深度学习]扩散模型(Diffusion Model)详解 文章目录 [深度学习]扩散模型(Diffusion Model)详解 1. 介绍 2. 具体方法 2.1 扩散过程 2.2 逆扩散过程 2. ...

  7. Keras深度学习实战(22)——生成对抗网络详解与实现

    Keras深度学习实战(22)--生成对抗网络详解与实现 0. 前言 1. 生成对抗网络原理 2. 模型分析 3. 利用生成对抗网络生成手写数字图像 小结 系列链接 0. 前言 生成对抗网络 (Gen ...

  8. 李沐d2l《动手学深度学习》第二版——风格迁移源码详解

    本文是对李沐Dive to DL<动手学深度学习>第二版13.12节风格迁移的源码详解,整体由Jupyter+VSCode完成,几乎所有重要代码均给出了注释,一看就懂.需要的同学可以在文末 ...

  9. 【深度学习】轻量化CNN网络MobileNet系列详解

    深度学习100问 Author:louwill Machine Learning Lab MobileNet系列作为轻量级网络的代表,使得CNN轻量化和移动端的部署成为可能.MobileNet系列目前 ...

最新文章

  1. linux 如何运行.sql文件
  2. hdu1695(莫比乌斯)或欧拉函数+容斥
  3. 构建之法阅读笔记03
  4. 结合Jexus + Kestrel 部署 asp.net core 生产环境
  5. 对称加密和不对称加密原理
  6. 那年大一在图书馆作死的大学高数笔记 | 导数和微分
  7. nedc和epa续航里程什么意思_400公里已成续航新起点,纯电动车的实用性到底怎样...
  8. 内蒙古农大孙志宏教授证实超深度混合宏基因组测序能够对人类肠道微生物组中的低丰度物种进行基因组和功能表征...
  9. java 中类型后面三个点的用法
  10. 插件式架构设计实践一:插件式系统架构设计简介
  11. 图像处理自学(五):CAMERA驱动软件硬件架构V4L2
  12. IDL实现矢量(shp)裁剪栅格TASK(一)
  13. imageJ下载 安装插件
  14. android webview浏览器下载文件,Android 浏览器 —— 使用 WebView 实现文件下载
  15. AVX贴片钽电容标识
  16. 有哪些好的科研工具软件?
  17. 弘扬中国文化创作发展文学建设事业,间谈小说 “文味”和“接笔 ”的看法...
  18. 光纤布拉格光栅(FBG)笔记【1】:波导结构和布拉格波长推导
  19. 微信小程序--js中string转换为number
  20. JSON 字符串是如何被解析的?JsonParser 了解一下

热门文章

  1. 获得自定义的所有相簿
  2. 砂积石的山水盆景制作
  3. 流量治理选开源还是自研,有点小纠结
  4. 机器学习算法_明确解释:4种机器学习算法
  5. python3.0制表符_④ Python3.0字符串
  6. 记录uniapp打包成App
  7. 如何制作移动追踪马赛克?
  8. java双向链表反转_单双向链表反转【面试题】
  9. 数学建模常用算法—多目标规划
  10. OpenCV实现双边滤波