神经网络学习引入-图片预处理Preprocessing与损失函数

图片数据预处理 Image data preprocessing

样本:原始像素数据(随机选取于[0,255])
在机器学习中:输入特征的规范化
(perform normalization of your input features)
在实际应用中:通过缩减每个特征的含义来中心化数据集具有重要意义
(It is important to center your data by subtracting the mean from every feature)

对于图像数据的预处理,它对应于计算训练图像上的平均图像,并从每个图像中减去它,以获得一个像素在[-127,127]之间的图像。

更普遍的预处理方法是缩放每个输入的特征使每个特征的值在[-1,1]之间。

损失函数

SVM损失函数(hinge loss)

SVM损失函数基于SVM想要得到这样一个结果:对于每一张图片,正确分类的得分远远高于其余分类。
也就是说,一个第i类的样本,我们得到它的像素矩阵,以及对应标签 y i y_{i} yi。评分函数利用像素计算出分类的得分 f ( x i , W ) f(x_{i},W) f(xi,W),下面我们用s表示这个得分。比如该图像在分类j上的得分 s j = f ( x i , W ) j s_{j}=f(x_{i},W)_{j} sj=f(xi,W)j
SVM损失函数如下所示:
L i = ∑ j ≠ y i m a x ( 0 , s j − s y i + Δ ) L_{i}=\sum_{j\neq y_{i}}max(0,s_{j}-s_{y_{i}}+\Delta) Li=j̸=yimax(0,sjsyi+Δ)
SVM 损失希望正确分类 y i y_{i} yi的得分远大于不正确分类的得分,他们之间的差值至少大于 Δ \Delta Δ。上式亦可写做:
L i = ∑ j ≠ y i m a x ( 0 , w j T x i − w y i T x i + Δ ) L_{i}=\sum_{j \neq y_{i}}max(0,w_{j}^{T}x_{i}-w_{y_{i}}^{T}x_{i}+\Delta) Li=j̸=yimax(0,wjTxiwyiTxi+Δ)
其中 w j w_{j} wj是W第j行的列形式。
这种阈值介于0到最大值之间的函数称为Hinge loss。类似L1距离和L2距离的关系,同样也有二次hinge loss(squared hinge loss SVM)使用 m a x ( 0 , − ) 2 max(0,-)^{2} max(0,)2来增强损失函数的反馈,即对错误评分的惩罚。普通版本的hinge loss更为基础,但在某些数据集上二次hinge loss效果更好。

  • 规范化Regularization
    由于存在这样一个问题:对于所有的i, L I = 0 L_{I}=0 LI=0;对于任意 λ > 1 \lambda>1 λ>1 λ W = 0 \lambda W =0 λW=0
    我们希望对特定的权重矢量,能够消除这种歧义,于是我们采用规范化惩罚R(W)(regularization penalty)
    一种非常常见的方法是第二范式(L2 norm):通过对所有参数的惩罚平方放大来避免权重过大。
    R ( W ) = ∑ k ∑ l W k , l 2 R(W)=\sum_{k}\sum_{l}W_{k,l}^{2} R(W)=klWk,l2
    注意规范化函数并不是一个处理数据的函数,它只作用于权重W。于是SVM损失 = 数据损失 + 规范化损失,公式如下所示:
    L = 1 N ∑ i ∑ j ≠ y i [ m a x ( 0 , f ( x i , W ) j − f ( x i , W ) y i + Δ ) ] + λ ∑ k ∑ l W k , l 2 L= \frac{1}{N}\sum_{i}\sum_{j \neq y_{i}}[max(0,f(x_{i},W)_{j}-f(x_{i},W)_{y_{i}}+\Delta)]+\lambda \sum_{k}\sum_{l}W_{k,l}^{2} L=N1ij̸=yi[max(0,f(xi,W)jf(xi,W)yi+Δ)]+λklWk,l2
    最值得注意的地方在于,惩罚过大的权重值趋向于加强普遍性,因为它意味着没有哪个输入可以独自对最终得分造成巨大影响。
    我们希望能够得到这样一个权重矢量,它的损失值最小。

Softmax classifier

除了SVM分类外,另一常见分类器是Softmax分类器,Softmax有一个不同于SVM的损失函数。Softmax可以看作是二元逻辑回归分类的多分类情况。
Softmax提供一个直观的输出(概率)和一个关于该概率的解释。Softmax函数如下所示
f i = e z j ∑ k e z k f_{i}=\frac{e^{z_{j}}}{\sum_{k}e^{z}k} fi=kezkezj
其中z为任意实数组成的矢量,并将最后的值压缩到零一之间,且总和为1。
Softmax使用的损失函数是交叉熵损失(cross-entropy loss),如下所示:
L i = − l o g ( e y i f ∑ j e f y j ) L_{i}=-log(\frac{e^f_{y_{i}}}{\sum_{j}e^{f_{y{j}}}}) Li=log(jefyjeyif)
上式也可以表示为:
L i = − f y i + l o g ∑ j e f j L_{i}=-f_{y_{i}}+log\sum_{j}e^{f_{j}} Li=fyi+logjefj
实际距离p和预测距离q之间的交叉墒是:
H ( p , q ) = − ∑ x p ( x ) l o g q ( x ) H(p,q)=-\sum_{x}p(x)logq(x) H(p,q)=xp(x)logq(x)
softmax算法的目的是最小化正确分类和预测值之间的交叉熵,交叉熵的目的是预测的所有值都准确地落在准确值上。较大的数值可能导致不稳定的问题,于是利用标准化技术:
e f i ∑ j e f j = C e f i C ∑ j e f j = e f i + l o g C ∑ j e f j + l o g C \frac{e^{f_{i}}}{\sum_{j}e^{f_{j}}}=\frac{Ce^{f_{i}}}{C\sum_{j}e^{f_{j}}}=\frac{e^{f_{i}+logC}}{\sum_{j}e^{f_{j+logC}}} jefjefi=CjefjCefi=jefj+logCefi+logC
C的常用取值为 l o g C = − m a x j f j logC=-max_{j}f_{j} logC=maxjfj,这表示我们应该通过对f的值的调整,来限定最大值为0。

SVM vs. Softmax

神经网络学习引入-图片预处理Preprocessing与损失函数_第1张图片

你可能感兴趣的:(CS231n学习笔记)