甲乙小朋友的房子

甲乙小朋友很笨,但甲乙小朋友不会放弃

0%

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

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

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

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

方法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,简单学习条件统计量

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

均方误差

通过解优化问题:

\[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的均值

平均绝对误差

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

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

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

比较

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