Numpy Softmax函数
在本文中,我们将会学习Numpy和CS231n的基础概念。本篇文章关注重点在对softmax loss function的梯度计算。如果你对于softmax loss function和梯度计算已有了大致的了解,那么读完这篇文章后将会对你的理解更加深入。
阅读更多:Numpy 教程
Softmax Loss Function
k)
$$
其中,是softmax函数的预测概率,即
这个导数公式展示了softmax loss 的推导过程。当我们拥有了误差函数的导数,我们就可以更新权重并且减小误差了。在众多的深度学习框架中,这个过程通常是自动化的。比如TensorFlow和PyTorch等框架会自动计算导数,无需手动计算。
Numpy CS231n 代码实现
现在,我们来实现这个导数公式。在这个部分,我们将编写使用Numpy库计算导数的代码。
导入库和数据声明
在这里,我们先声明了一个K值为10的常量,这个值说明了我们模型的分类数量。接着,我们分别声明了包含10个元素的向量 和包含 个元素的k类得分向量 。最后,我们也声明了权重数组的维度为数据集中样本的维度和类别个数,这里设置为(5, 10)。
计算softmax概率值
在这里,我们计算了每个样本的softmax函数概率值。使用Numpy中的exp函数将得分向量f中的每个值进行指数化处理。为了得到每个类别的概率值,我们需要对指数化后的值进行归一化,也就是将它们除以所有类别的指数化值和。在这里,我们使用了Numpy中的sum函数,对所有的类别进行了求和。使用axis=0参数,使得函数在每列中执行这个操作,每列代表一个样本的所有类别概率值。
计算损失值
这一步计算了每个样本的损失值。通过对于真实类别的概率值取对数,再乘以负数,我们可以获取每个样本的损失值。这里需要注意的是,为了获取正确的损失值,我们需要使用NumPy采取的广播机制。y向量包含了每个数据点真实的类别。我们使用它的值作为索引来获取p中每个样本的概率值。
计算导数
此时,我们已经计算出了我们想要的梯度的形式。这一步计算了softmax loss函数关于得分f的导数。是关于输入得分向量的导数。其计算方式如上文所述。
计算权重更新
dW是损失函数对权重的导数。我们可以用前面的代码获得输入变量矩阵X,使用它来计算导数,公式如下: 。
总结
到这里我们就完成了对于Numpy和CS231n的初学入门,并完成了对softmax loss function梯度的计算。在这个过程中,我们实现了代码,并解释了一些核心概念,比如如何计算softmax函数以及什么是导数以及它在深度学习中的应用。理解了本文中的核心概念,你就已经开始深入了解深度学习的工作原理。