由于神经网络的非线性导致其代价函数大多数情况下都是非凸的,所以使用基于梯度的迭代算法不能保证代价函数达到最小值。
凸优化从任何初始值都会保证收敛(理论上,实践中可能会遇到数值问题)。在非凸代价函数上使用随机梯度下降不能保证收敛,同时对初始值比较敏感。
应用基于梯度的学习,我们必须选择:
1. 代价函数
2. 怎么表示模型的输出
1 代价函数
大多数情况下,参数模型定义了一个分布
pmodel(y|x;θ)
,并简单地使用最大似然准则。
这意味着我们使用训练数据和模型的预测之间的交叉熵作为代价函数。
1.1 使用最大似然估计条件分布
代价函数:
J(θ)=−Ex,y pdatalog(pmodel(y|x))
代价函数的特定形式取决于模型的概率分布。
这种方法的优点:不必为每一个模型单独设计一个代价函数,有一个模型 p(y|x) 就会自动生成一个代价函数 log(p(y|x))
神经网络设计中一个反复的主题就是代价函数的梯度必须很大,以足够用来为学习算法做向导。
1.2 条件统计量
有时不必学习一个全概率分布 p(y|x;θ) ,只需要学习一个给定x,y的条件统计量。
足够强大的神经网络可以表示任意的函数,所以我们可以认为学习是选择一个函数而不是一组参数。
我们可以设计代价函数在选择某些具体的函数时具有最小值。
例如:
f∗=argminfEx,y pdata||y−f(x)||2
相当于
f∗(x)=Ey pdata(y|x)[y]
选择最小均方误差,相当于预测给定x时y的条件均值。
f∗=argminfEx,y pdata||y−f(x)||1
选择最小绝对误差,相当于预测给定x时y的条件中位数。
由于使用梯度下降时,最小均方误差和最小绝对误差都有比较小的梯度,所以结果较差,故实际中交叉熵代价函数比较常用。
2 输出单元
选择怎么表示输出单元决定了交叉熵函数的形式。
2.1 线性单元
输出是输入的仿射变换:
y¯=WTh+b
线性单元经常用来生成条件高斯分布的均值:
p(y|x)=N(y;y¯,I)
2.2 sigmoid单元
z=ωTh+b
sigmoid函数:
g(x)=11+exp(−x)
softplus函数:
ζ(x)=log(1+exp(x))
sigmoid输出单元分成两部分:1.计算线性层z;2.使用sigmoid函数将z转换成一个概率。
导出模型分布为
P(y)=g((2y−1)z)
故使用最大似然估计导出其代价函数为
J(θ)=−log(P(y|x))=ζ((1−2y)z)