自定义损失函数
我们使用损失函数来计算一个给定的算法与它所训练的数据的匹配程度。损失计算是基于预测值和实际值之间的差异来做的。如果预测值与实际值相差甚远,损失函数将得到一个非常大的数值。
1.
import tensorflow as tf
#举例:方差损失函数
def customized_mse(y_true, y_pred):
return tf.reduce_mean(tf.squre(y_pred - y_true))
model.compile(loss = customized_mse,......)
已有损失函数
MSE
-
不用于分类问题的原因:
- MSE作为分类的损失函数会有梯度消失的问题。
MSE是非突的,存在很多局部极小值点
- MSE Loss(mean-squared loss)当与Sigmoid或Softmax搭配使用时,loss的偏导数的变化趋势和预测值及真实值之间的差值的变化趋势不一致。也就是说当预测值与真实值的差值变大的时候,其偏导数反而可能变小。
交叉熵损失函数
- 信息量:所以当越不可能的事件发生了,我们获取到的信息量就越大。越可能发生的事件发生了,我们获取到的信息量就越小。那么信息量应该和事件发生的概率有关。
-
熵:对于某个事件,有n种可能性,每一种可能性都有一个概率p(xi),熵表示信息量的期望
-
相对熵:又称KL散度,如果我们对于同一个随机变量 x 有两个单独的概率分布 P(x) 和 Q(x),我们可以使用 KL 散度(Kullback-Leibler (KL) divergence)来衡量这两个分布的差异。
在机器学习中,P往往用来表示样本的真实分布,比如[1,0,0]表示当前样本属于第一类。Q用来表示模型所预测的分布,比如[0.7,0.2,0.1]
4.
前一部分恰巧就是p的熵,p代表label或者叫groundtruth,故−H(p(x))不变,故在优化过程中,只需要关注交叉熵就可以了,所以一般在机器学习中直接用用交叉熵做loss,评估模型。
-
交叉熵:
L1,L2正则
在原目标(代价)函数 中添加惩罚项,对复杂度高的模型进行“惩罚”,
理解一之带约束条件的优化
VC维:对于一个指示函数集,如果存在H个样本能够被函数集中的函数按所有可能的2^H种形式分开,则称函数集能够将H个样本打散,函数集的VC维就是它能够打散的最大样本数目H_{max}。如果对任意数目的本,在该函数集中都能找到函数将它们打散,则称该函数集的VC维是无穷大。
机器学习中,实际上,模型就是假设空间中的一个函数。假设空间代表了一系列的函数,而我们的训练过程就是在这个集合中找到一个最优或近似最优的函数,来完成我们的任务。
理解二之最大后验概率估计(MAP)
效果分析
L2
L1
理论分析
为了使问题简化,常常将目标函数在某点邻域展开成泰勒多项式来逼近原函数。
L2
L1
综上,L2正则化的效果是对原最优解的每个元素进行不同比例的放缩;L1正则化则会使原最优解的元素产生不同量的偏移,并使某些元素为0,从而产生稀疏性。