之前我们在神经网络简介中曾经提到过误差函数。这一节我们总结一下误差函数。
误差函数一般有两种来源:
- 如果参数模型定义了一个分布\(p(y|x;\theta)\),我们采用最大似然原理得到代价函数:训练数据和模型预测间的交叉熵。这个在之后会详细解释。
- 如果不预测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)$最小。
用似然解决问题带来的好处:
- 当明确了一个模型\(p(y|x)\)时,就自动地确定了代价函数\(logp(y|x)\)。
- 对数函数能帮我们避免梯度过小(例如有的输出单元有一个指数函数,取对数后梯度就不那么小了)
方法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取值的中位数。
比较
一般,均方误差和平均绝对误差在梯度下降法表现不好,因为饱和的输出单元梯度非常小。所以一般来说交叉熵代价函数更受欢迎。