深度学习Loss function之Softmax中的矩阵求导

本文详细探讨了在深度学习中,针对Softmax损失函数的矩阵求导过程。首先介绍了Softmax函数及其损失函数的概念,然后通过推导展示了如何从损失函数的梯度df过渡到权重矩阵W的梯度dW,以此加深对反向传播的理解。最后,提供了与CS231n课程相关的Python代码实现链接。

最近在重温CS231n的Assignment,采用SGD进行参数更新,在back propagation计算gradient时经常涉及到矩阵运算的的“求导”,在许多代码中该步骤仅需进行一次矩阵乘法,对其实现背后的推导没有进行说明,自己只有照抄死记硬背,但是毕竟只有明白背后的原理才能举一反三,在遇到其他需要对矩阵进行求导的情况时能够自己解决,因此今天我试着推导了一下,并且希望记录下来方便以后查阅:

首先简单介绍下Softmax:

假设在神经网络的最后一层输出为f(N,C),N表示train data的数目,C表示种类的数量,f[i,j]可以理解为第i个train data在j类的分数,而Softmax将以f为输入,然后计算各个train data属于j类的概率,再计算Loss(一种对Softmax的解释)。Softmax的Loss function为:

                                

Softmax函数在矩阵上具有广泛应用,常用于机器学习尤其是深度学习的输出层,可将矩阵元素量化为概率值,使结果更符合人类对预测准确率的直观感受[^1]。 在MNIST手写数字识别任务中,经xw + b运算会得到一个一维矩阵,例如[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]。此时运用softmax函数(如pre = tf.nn.softmax(xw + b)),能把矩阵中的元素转化为对应数字的概率大小,结果可能是[0, 1/45, 2/45, 3/45, 4/45, …, 9/45]。之后在损失函数的计算里,可利用这些概率值与真实标签(以one - hot编码形式呈现)来计算损失,像loss = tf.reduce_mean(tf.square(y - pre)),这里的y是one - hot类型。假设真实数字是3,其one - hot编码就是[0, 0, 0, 1, 0, 0, 0, 0, 0, 0] [^1]。 从数学原理来看,对于输入矩阵x∈R1×n,softmax函数的计算公式为softmax(x)=softmax([x1 x2 … xn])=[ex1∑jexj ex2∑jexj ... exn∑jexj] ,它能把一个含任意实数的K维向量“压缩”到另一个K维实向量中,让每个元素的范围都在[0, 1]之间,并且所有元素的和为1 [^2][^3]。 在代码实现方面,在Python的PyTorch库中,对于稀疏矩阵softmax的操作如下: ```python import torch # 假设已经定义好 v_indices, temp, num_node temp = self.gen_mlp(self.dropout(ff)).reshape(-1) z_matrix = torch.sparse.FloatTensor(v_indices, temp, (num_node, num_node)) pi = torch.sparse.softmax(z_matrix, dim=1) ``` 此代码将生成的临时向量temp构建成稀疏矩阵z_matrix,然后对其按行(dim = 1)应用softmax函数 [^4]。 在机器学习课程练习中,softmax函数在预测任务里也有应用。以下是一个预测函数的示例: ```matlab function [pred] = softmaxPredict(softmaxModel, data) % softmaxModel - model trained using softmaxTrain % data - the N x M input matrix, where each column data(:, i) corresponds to % a single test set % % Your code should produce the prediction matrix % pred, where pred(i) is argmax_c P(y(c) | x(i)). % Unroll the parameters from theta theta = softmaxModel.optTheta; % this provides a numClasses x inputSize matrix pred = zeros(1, size(data, 2)); %% ---------- YOUR CODE HERE -------------------------------------- % Instructions: Compute pred using theta assuming that the labels start % from 1. hypothesis = exp(theta * data); [a,pred] = max(hypothesis); % --------------------------------------------------------------------- end ``` 该函数依据训练好的softmax模型和输入数据,计算预测结果。它先将模型参数展开,接着计算指数矩阵,最后找出每列的最大值对应的索引作为预测结果 [^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值