深度学习入门笔记(7)—— Multinomial Logistic Regression / Softmax Regression

在这里插入图片描述
首先介绍一个非常著名的多分类数据集 MNIST,也就是 0 到 9 的手写数字数据集。每个图像都是 28 * 28,用于Pytorch 数据读取的格式是 NCHW,即 Number、Channel、Height、Weight。

在这里插入图片描述

在这里插入图片描述

读取图像之后,就能看到一个只有单通道的(灰度)图像,实际上就是一行行像素值的组合,用于 Softmax Regression 时输入得是一个向量,所以要将一行行的像素进行拼接,成为一个长的向量。同时,将像素值从 0 - 255 转化为 0 - 1 有利于梯度下降。

在这里插入图片描述
回顾之前的 Logistic Regression,就是输入向量 x 与权重向量 w 做点积再加上偏置 b 得到 Net input(加权和),然后经过 Sigmoid 函数,得到一个概率输出,这个概率就是在输入为 x 的条件下预测为 y = 1 的后验概率。

在这里插入图片描述
将 Logistic Regression 拓展到多分类任务中,最简单的方法就是使用多个 Logistic Regression,当类别数为 h ,输入特征数为 m 时,可以得到 h 个长度为 m 的权重向量 w,构成的权重矩阵 W 大小为 h * m。每一个概率输出都是当输入为 x 时预测为某一个类的后验概率,但是各个类的概率之和不为 1,因此该模型适用于不互斥类的多分类任务。

在这里插入图片描述
对于互斥类的多分类任务,我们希望各个类的输出概率之和为 1,此时就可以使用 Softmax 函数。

在这里插入图片描述
Softmax 函数实际上就是一个指数归一化函数,使得 h 个类的后验概率求和等于 1

在这里插入图片描述
假设有四个训练样本,它们的标签分别为 0、1、3、2,经过 Onehot Encoding 之后,就能得到四个标签向量(行向量),如第一个训练样本的标签向量为 [1, 0, 0, 0]

在这里插入图片描述
引出 Onehot Encoding 之后,就可以介绍交叉熵损失函数的拓展 —— 多元交叉熵了。y[i]{y^{[i]}}y[i] 是第 i 个训练样本的标签向量,如前面举例过的 [1, 0, 0, 0];yj[i]{y_j}^{[i]}yj[i] 则表示第 i 个训练样本的标签向量的第 j 个类位置的取值,也就是 0 或 1;aj[i]{a_j}^{[i]}aj[i] 则是 Softmax 函数输出矩阵的对应位置的值,即第 i 行第 j 列的值。下面是例子:

在这里插入图片描述
假设我们有四个训练样本,类别数为 3,则标签矩阵和 Softmax 的输出矩阵都是 4 * 3;计算第一个训练样本的 Loss,就是标签矩阵的第一行与 Softmax 输出矩阵的第一行对应位置的 log ,相乘再相加。

在这里插入图片描述
四个训练样本的 Loss 计算都是同理
在这里插入图片描述
将各个训练样本的 Loss 加起来就是训练集上的损失。

在这里插入图片描述
想要使用梯度下降更新参数,核心就是求得损失关于参数的偏导数,即梯度。借助链式法则,可以将损失关于参数的偏导数分解成:损失关于激活函数输出的偏导数 + 激活函数关于加权和(Net Input)的偏导数 + 加权和关于参数的偏导数

在这里插入图片描述
将 Softmax Regression 以图形的形式表现出来,注意这不是多层感知器,还是单层的,z1 、z2 是 Softmax 的输入,而 a1、a2 是 Softmax 的输出,中间的连线不代表权重。

在这里插入图片描述
假设要求损失 LLL 关于 w1,2{w_{1,2}}w1,2 的偏导数,由于 LLL 有多个输入变量 a1{a_1}a1a2{a_2}a2,所以用链式法则分解后的两部分要相加。

在这里插入图片描述
损失关于激活函数输出的偏导数,记住损失是多元交叉熵损失,对于一个激活函数输出求偏导数,如 a1{a_1}a1,则其余的 a2,a3,...,ah{a_2},{a_3},...,{a_h}a2,a3,...,ah 都是常数,求导为 0

在这里插入图片描述
激活函数(Softmax)关于加权和的偏导数,利用的是商的求导或者除法法则,分子为 f,分母为 g,一路按照公式求解即可。

在这里插入图片描述
加权和关于参数的偏导数,比较简单

在这里插入图片描述
分别求出三部分的偏导数后相乘,再相加,可以得到很简洁的学习规则,实际上 Softmax Regressopm 和 Logistic Regression 的学习规则是一样的。

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

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

相关文章

[C#.NET 拾遗补漏]09:数据标注与数据校验

数据标注(Data Annotation)是类或类成员添加上下文信息的一种方式,在 C# 通常用特性(Attribute)类来描述。它的用途主要可以分为下面这三类:验证 Validation:向数据添加验证规则展现 Display&am…

2023届春招实习拉钩一面凉经

面完就当挂了 老想着其实自己其实还能回答的更好 可回不去了 计网的的ioc七层模型各层的作用 为什么是七层模型而不是两层模型 SpringBoot最核心的注解是什么 Spring中IOC原理以及相关注解 说说对Mysql数据库索引的了解 map有哪些实现 分别讲讲? 项目中数据库…

Pytorch中损失函数 NLLLOSS 和 CROSSENTROPYLOSS 的区别

NLLLOSS 是 negative log likelihood loss 负对数似然损失函数,CROSSENTROPYLOSS 是交叉熵损失函数,它们都是用于多分类任务的损失函数,正如我在笔记中提到的,它们实际上是一样的,在 Pytorch 中这两者的区别就只在于接…

收好这张MySQL导图,全是知识点!

感谢阅读,直接上干货!最新整理的MySQL知识点全图,完整系统超3万字。直接跳转文末,下载源文件!开源跨平台的.NET Core越来越热门了,腾讯、网易、顺丰等大厂都在招聘,而且都开始明确要求MySQL了&a…

深度学习入门笔记(8)—— Multilayer Perceptron 多层感知器

所谓多层感知器,其实就是具有一个或多个隐藏层(hidden layer)的全连接前馈神经网络,如图所示,在最重要的求取损失关于权重的偏导数的过程上,跟之前的 Logistic Regression 和 Softmax Regression 一样&…

蓝桥杯-填空题-门牌制作

一&#xff1a;题目 二&#xff1a;代码 #include <iostream> using namespace std; int main() {int nums 2020;int count 0;string str to_string(nums);for(int i 1; i < nums; i) {string str to_string(i);for(auto temp: str) {if(temp 2){count;}}}cout…

.NET Core中间件与依赖注入的一些思考

点击上方蓝字"小黑在哪里"关注我吧1.起源? 为什么会有这篇文章呢? 源于我看了老A的aspnet core 3 框架揭秘[1] 请求管道 篇产生的疑惑?三点疑惑:Singleton服务中注入Scoped服务产生内存泄露?关于中间件的生命周期是Singleton的?怎么避免中间件、Singleton服务中…

深度学习入门笔记(9)—— Regularization to avoid overfitting 用正则化来避免过拟合

在维基百科的词条中&#xff0c;正则化就是让答案变得更简单的&#xff0c;目的是防止过拟合。在分类上可以分为显式正则化&#xff08;对目标函数添加先验、惩罚、约束、成本&#xff09;和隐式正则化&#xff08;所有其他形式的正则化如提前停止、集成学习、Dropout 等&#…

蓝桥杯-填空题-购物单

一&#xff1a;题目 **** 180.90 88折 **** 10.25 65折 **** 56.14 9折 **** 104.65 9折 **** 100.30 88折 **** 297.15 半价 **** 26.75 65折 **** 130.62 半价 **** 240.28 …

C# 中 System.Index 结构体和 Hat 运算符(^)的全新用法

翻译自 John Demetriou 2019年2月17日 的文章 《C# 8 – Introducing Index Struct And A Brand New Usage For The Hat Operator》今天我们要讲的是 Hat 运算符(^)。目前为止&#xff0c;Hat 运算符(^)已经被用作布尔类型的异或运算符&#xff0c;以及字节、整型类型的按位异或…

Lagrange Multipliers 拉格朗日乘数法(含 KKT 条件)

最优化问题通常是指对于给定的某一函数&#xff0c;求其在指定作用域上的全局最小值&#xff0c;一般情况下&#xff0c;最优化问题一般分为三种情况&#xff1a; &#xff08;1&#xff09;无约束条件 对于无约束条件的优化问题中&#xff0c;如果一个函数 f 是凸函数&#…

蓝桥杯-代码-数字三角形

一:题目 二:代码 #include <iostream> #include<vector> using namespace std; int main() {/**思路:1.确定dp数组的定义以及下标的含义dp[i][j] 表示的是一条路径到达下标i和j时&#xff0c;的最大值 2.确定dp数组的状态转移公式我们当前位置的最大值其实是由右上…

ABP VNext从单体切换到微服务

注&#xff1a;此处的微服务只考虑服务部分&#xff0c;不考虑内外层网关、认证等。ABP VNext从单体切换到微服务&#xff0c;提供了相当大的便利性&#xff0c;对于各模块内部不要做任何调整&#xff0c;仅需要调整承载体即可。ABP can help you in that point by offerring a…

dotnet 在 UOS 国产系统上使用 Xamarin Forms 创建 xaml 界面的 GTK 应用

在前面几篇博客告诉大家如何部署 GTK 应用&#xff0c;此时的应用是特别弱的&#xff0c;大概只是到拖控件级。尽管和 WinForms 一样也能写出特别强大的应用&#xff0c;但是为了提升一点开发效率&#xff0c;咱开始使用 xaml 神器写界面。本文告诉大家如何在 UOS 国产系统上&a…

赛码-编程题-打字

一:题目 二&#xff1a;上码 #include<bits/stdc.h> using namespace std;int main() {int n;vector<int> v1;cin >> n;for(int i 0; i < n; i) {string str;int count 0;cin >> str;for (int j 0; j < str.size(); j) {int num int(str[j]…

Python 中的 with 语句用法和 Pytorch 中的 with torch.no_grad() 解析

Python 中的 with 语句适用于对资源进行访问的场合&#xff0c;确保不管使用过程中是否发生异常都会执行必要的“清理”操作&#xff08;异常处理&#xff09;&#xff0c;释放资源&#xff0c;比如文件使用后自动关闭&#xff0f;线程中锁的自动获取和释放等。例如下面是文件读…

遍历 Dictionary,你会几种方式?

一&#xff1a;背景 1. 讲故事昨天在 StackOverflow 上看到一个很有趣的问题&#xff0c;说: 你会几种遍历字典的方式&#xff0c;然后跟帖就是各种奇葩的回答&#xff0c;挺有意思&#xff0c;马上就要国庆了&#xff0c;娱乐娱乐吧&#xff0c;说说这种挺无聊的问题?????…

PyTorch 中各种操纵维度的函数比较 view() reshape() squeeze() unsqueeze() flatten()

首先&#xff0c;假设我们有一个三行四列的张量 X&#xff1a; view() 和 reshape() 函数都可以指定并改变张量的维度&#xff0c;它们本质上是相同的&#xff0c;只有两点区别&#xff1a; 1、view() 函数返回的是原始张量的视图&#xff0c;而 reshape() 函数返回的是原始张…

.NET Core 下的 API 网关

网关介绍网关其实就是将我们写好的API全部放在一个统一的地址暴露在公网&#xff0c;提供访问的一个入口。在 .NET Core下可以使用Ocelot来帮助我们很方便的接入API 网关。与之类似的库还有ProxyKit&#xff0c;微软也发布了一个反向代理的库YARP。关于网关的介绍不多说了&…

leetcode剑指 Offer 29. 顺时针打印矩阵

一&#xff1a;题目 二:上码 class Solution { public:vector<int> spiralOrder(vector<vector<int>>& matrix) {//判空处理 否则会出现空指针异常if(matrix.size() 0 || matrix[0].size() 0){return {};}int m matrix.size();// 行int n matrix[0].…