深度学习算法-误差函数探究

之前我们在神经网络简介中曾经提到过误差函数。这一节我们总结一下误差函数。

误差函数一般有两种来源:

  1. 如果参数模型定义了一个分布$p(y|x;\theta)$,我们采用最大似然原理得到代价函数:训练数据和模型预测间的交叉熵。这个在之后会详细解释。
  2. 如果不预测y的完整概率分布,仅仅预测在给定x条件下y的某种统计量,那就用某些专门的损失函数来计算。

1. 方法1,使用最大似然学习条件分布

可以在博客最大似然估计中看到,参数模型定义了一个分布$p(y|x;\theta)$,为了求得参数,我们使用最大似然原理,得到最终的目标函数是最小化代价函数J——训练数据模型预测间的交叉熵:

$$J(\theta)=-E_{x,y\sim p’_{data}}log p_{model}(y|x)$$

上式的意义是:在$x,y$服从训练数据$ p’_{data}$分布下,使得模型的$-Elog p_{model}(y|x)$最小。

用似然解决问题带来的好处:

  1. 当明确了一个模型$p(y|x)$时,就自动地确定了代价函数$logp(y|x)$。
  2. 对数函数能帮我们避免梯度过小(例如有的输出单元有一个指数函数,取对数后梯度就不那么小了)

2. 方法2,简单学习条件统计量

我们用历史的数据,计算出特征x下y发生的概率:$f(x)=p(y|x)$,将它作为x特征下y的预测。学习这个条件统计量的过程就是我们这节介绍的方法。

2.1. 均方误差

通过解优化问题:

$$f^*=arg min_f E_{x,y\sim p_{data}}||y-f(x)||^2 \tag{均方误差最小化时的f^{※}}$$

得到$f^*$,我们用它来进行预测得到:

$$f^*(x)=E_{y\sim p_{data}(y|x)}[y]\tag{将所有服从p_{data}(y|x)的y的y均值作为x特征下y的预测}$$

可以看出,这样得到的函数是可以用来对每个x的值预测出y的均值

2.2. 平均绝对误差

还有另一种误差叫平均绝对误差,通过解优化问题:

$$f^*=arg min_f E_{x,y \sim p_{data}}||y-f(x)||_1$$

得到的函数,可以对每个x预测y取值的中位数

3. 比较

一般,均方误差和平均绝对误差在梯度下降法表现不好,因为饱和的输出单元梯度非常小。所以一般来说交叉熵代价函数更受欢迎。