损失函数对训练的难易有影响
总结
分类和回归做的事情都差不多,不同的是损失函数和最后输出结果。
将分类问题当做回归问题处理,类别要使用独热编码表示。使用独热编码表示的类别,网络输出要经过softmax处理。
分类问题的损失函数 MSE 和 Cross-entropy相比较,Cross-entropy效果更好更常见。
批次标准化(BN),对特征做均值为0方差为1的归一化,有助于训练。
回归问题
分类问题
分类和回归做的事情都差不多,不同的是最后输出结果,分类输出的 y 是向量,不是数值,最后的 y’ 要把 y 经过一个softmax函数再输出,使 y’ 的值在0~1之间。
**若将分类问题当做回归问题,一种方法是将类别编码为对应的数字,神经网络输出的结果为一个数值。**但是这样做存在问题,class 1 用 1 表示,class 2 用 2 表示,class 3 用 3 表示,默认了class 1 与class 2 比较相似,class 1 与class 3 比较不相似,因为将类别编码为数字,导致了实际情况中可能并没有的这种类别间的相似关系。
实际问题中,有可能真的存在这种类别间的相似关系。例如:用身高和体重预测学生的年级。一年级和二年级的身高和体重比较接近,但一年级和三年级的身高和体重比较不相似。
若将分类问题当做回归问题,正确的类别编码方式是:将类别表示为独热码one-hot vector。这种表示法,不会使类别间产生不存在的相似关系,神经网络需要输出的结果不再是一个数值,而是一个向量,向量的元素个数与类别个数相同。
softmax
softmax的作用:对最大值做强化,因为在做第一步的时候,对原始输出z取exponential会使大的值和小的值之间的差距被拉得更开,也就是强化大的值。
输出值y的范围较原始输出z发生变化:1 y_i>0, 因为指数e^z>0。2 y_i<1且各类y_i之和为1, 这是归一化的效果。所以softmax的输出可以估计后验概率(posterior probability) P(Y|X)。
Softmax公式中为什么要用exp?这是有原因/可解释的,可以看下PRML,也可以搜下最大熵。
最大熵(Maximum Entropy)其实也是一种分类器,和逻辑回归一样,只是从信息论的角度来看待。
三个及三个以上类别使用softmax,若只有两个类别的情况下,可以使用softmax,也可以直接使用sigmoid。两种做法中更常见的是使用sigmoid。
可以推导得出:两个类别用softmax或用sigmoid是等价的。
分类问题损失函数 - MSE & Cross-entropy
方法一:MSE
方法二:Cross-entropy
最小化交叉熵等价于最大似然估计。
MSE Vs Cross-entropy - Cross-entropy效果更好更常见
在分类问题中,Cross-entropy效果更好更常见,甚至在pytorch中,将softmax集成在了Cross-entropy中。
为什么Cross-entropy比MSE效果好?
数学证明:链接
下面举例说明。
假设y1和y2的变化范围为[-10,10],y3为-1000,y3取exp后的值很小,对结果影响很小,所以只考虑y1和y2。
因为真实标签为[1,0,0],所以使用MSE和Cross-entropy,当y1大,y2小的时候,损失小。当y1小,y2大的时候,损失大。
起始位置为error surface图中y1小,y2大的左上角,优化目标为error surface图中y1大,y2小的右下角。
因为Cross-entropy的左上角比较陡峭,所以收敛更快更好,MSE左上角比较平缓,所以收敛较慢。
批次标准化(Batch Normalization,BN)
对特征做均值为0方差为1的归一化,有助于训练。
Batch Normalization - Training
如果每次都使用所有的输入examples进行normalization,将会是一个large network,所以考虑 a batch 是自然而然的 — Batch Normalization适用于 batchsize 比较大的时候。