Notes
提出评分函数(score function)和损失函数(loss function)
score function 图像到分类标签的数值化映射
![\displaystyle f(x_i,W,b)=Wx_i+b](https://i-blog.csdnimg.cn/blog_migrate/db78e570732efc199a0ee0e6e1ccadf7.png)
W的每一个行向量就是一个分类器。如果改变其中一行的数字,会看见分类器在空间中对应的直线开始向着不同方向旋转。而偏差b,则允许分类器对应的直线平移。需要注意的是,如果没有偏差,无论权重如何,在时分类分值始终为0。这样所有分类器的线都不得不穿过原点。
这里还可以将参数W和b合并,把b向量加到W上,同时列向量x在最底部加一个元素[1]。
score function对一张图片会预测出其属于每一种类别的数值,将得分最高的类型预测为其类型
loss function对score function不正确分类的数值进行loss计算
主要提出了多类SVM loss 和softmax的交叉损失熵
![\displaystyle L_i=\sum_{j\not=y_i}max(0,s_j-s_{y_i}+\Delta)](https://i-blog.csdnimg.cn/blog_migrate/3715b7d54fb55c4f57f637763759ff60.png)
![\displaystyle Li=-log(\frac{e^{f_{y_i}}}{\sum_je^{f_j}})](https://i-blog.csdnimg.cn/blog_migrate/a4809e06cd13e3c1cee31e28eef8890b.png)
多类SVM loss:想要SVM在正确分类上的得分始终比不正确分类上的得分高出一个边界值
softmax loss: 上右式log中的式子称为softmax函数,其将输入f,都归一化到[0,1],并相加为1。再取熵作为loss
为了提高泛化能力,也就是W中的每个因子都对图片分类做出贡献,而不使得W中的某个维度对整体分值有过大的影响。引入了正则化惩罚。
将上式加到loss中,我们希望得到的loss尽量小,则正则化惩罚倾向于更小更分散的权重向量值。
loss function计算完成后,就可以进行最重要的步骤,优化W。在机器学习中,优化问题一般都采用梯度下降法解决。
对SVM loss function的某个数据点,求正确分类的微分
![L_i=\displaystyle\sum_{j\not =y_i}[max(0,w^T_jx_i-w^T_{y_i}x_i+\Delta)]](https://i-blog.csdnimg.cn/blog_migrate/e3a78cc049cae9626b995185cefc88be.png)
得:
![\displaystyle\nabla_{w_{y_i}}L_i=-(\sum_{j\not=y_i}1(w^T_jx_i-w^T_{y_i}x_i+\Delta>0))x_i](https://i-blog.csdnimg.cn/blog_migrate/66ebb09c8a38e528cb5ecb363e72c031.png)
对未正确分类的剩余行W求微分
得:
![\displaystyle\nabla_{w_j}L_i=1(w^T_jx_i-w^T_{y_i}x_i+\Delta>0)x_i](https://i-blog.csdnimg.cn/blog_migrate/a633d74d8ca5b2155b14de2e3cbdc6a6.png)
其中1是一个函数,代表当条件满足(即产生loss时),函数值为1,否则取0。这两个公式使用numpy向量化形式coding
# compute the gradient
margins[margins > 0] = 1.0
row_sum = np.sum(margins, axis=1) # 1 by N
margins[np.arange(num_train), y] = -row_sum
dW += np.dot(X.T, margins)/num_train + reg * W # D by C
margins为N*C的矩阵,means N个样本,每个样本被判别为一种类型时的loss,一共C类。由上面的微分公式得,正确分类的W微分为-X[i],错误分类的W微分为X[i]。X为N*D矩阵,means N个样本,每个样本有D个元素。