【MatConvNet代码解析】 vl_nnsoftmaxloss
背景知识:http://deeplearning.stanford.edu/wiki/index.php/Softmax%E5%9B%9E%E5%BD%92
假设softmax层的输入(softmax前一次的输出),或者理解为一般分类器的得分f(x)=</theta,x>中的/theta可以随便减一个常量。
或者假设现在的类别数目为N,不妨设为N=3,那么会有三个分类器,假设每个分类器的得分为f_j(x)=</theta_j,x>
我们知道在做softmax操作其实就是将exp(f_j(x))归一化。
所以这里每一个f_j(x)其实都可以去减三个分类器得分中任意一个,只要大家减同一个值,不影响结果。
所以在MatConvNet才会有这样的代码
这里大家减去的是N个分类器得分中最大的那个得分,代码中的x就是上面所述的分类器得分。
最后的损失函数为t,如果愿意硬推,不按照背景知识去解释,依然可以解释。解释如下: