基于梯度的学习——DeepLearning系列

基于梯度的学习

概述

普通的线性模型和神经网络的最大区别,在于神经网络的非线性容易使得我们感兴趣的代价函数变得非凸,这样就只能使得代价函数达到一个非常小的值,而不能保证全局收敛。

除此之外,对于前馈神经网络,将所有权重值随机化为小随机数是非常重要,偏置bias则应该初始为零或者小的正值。

代价函数

神经网络的一个重要设计就是代价函数的选择,在大多数情况下,参数模型定义了一个分布式\(p(y | x; \theta)\)并且我们使用最大似然原理。

使用最大似然学习条件分布

如果神经网络使用最大似然来训练,这意味着代价函数就是负的对数似然。 \[ J(\theta) = - E_{x, y - p_{data} } log _{p_{model} } (y | x) \] 代价函数的具体形式随着模型而改变,取决于\(log_{Pdata}\)的具体形式。

使用最大似然来导出代价函数的一个好处就是减轻了为每个模型设计代价函数的负担,因为每确定一个模型\(p(y|x)\)则自动确定了一个代价函数\(logp(y|x)\)。另外,为了避免代价函数的梯度不够大,使得预测性减弱,我们可以使用负的对数似然来避免这个问题。另外,用于实现最大似然估计的交叉熵代价函数有一个特性,就是它用于实践模型的时候,通常没有最小值。

学习条件统计量

有时我们并不是想学习一个完整的概率分布,而是想学习在给定x时y的某个条件统计量。

我们可以吧代价函数看做是一个泛函而不仅仅是一个函数,泛函是函数到实数的映射,因此我们可以将学习看做是选择一个函数而不仅仅是一组参数。例如我们可以设计一个代价泛函,使得它的最小值处于一个特殊的函数上,这个函数将x映射到给定x时y的期望值。

对函数求解优化问题需要用到变分法,我们使用变分法导出的第一个结果是解优化问题: \[ f^* = arg min _{f} E_{x, y - Pdata} || y - f(x) || ^ 2 \] 得到 \[ f^*(x) = E_{y - Pdata}(y|x)[y] \] 因此可以看到,如果我们最小化均方误差代价函数,将得到一个函数,它可以用来对每个x的值预测出y的均值。

不同的代价函数给出不同的统计量,例如: \[ f^* = arg min _{f} E_{x, y - Pdata} || y - f(x) || _1 \] 将得到一个函数可以对每个x预测y取值的中位数,这个代价函数被称为平均绝对误差。

输出单元

代价函数的选择与输出单元的选择密切相关,任何可用作输出的神经网络单元,也可以被用作隐藏单元。

用于高斯输出分布的线性单元

一种简单的输出单元是基于仿射变换,这些单元是线性单元。

给定特征h,线性输出单元层产生一个向量\(y'= W^Th+b\)。线性输出层经常被用来产生条件高斯分布的均值: \[ p(y|x) = N (y, y', I) \] 最大化其对数似然此时等价于最小化均方误差。

用于Bernoulli输出分布的sigmoid单元

许多任务需要预测二值型变量y的值,此时最大似然的方法是定义y在x条件下的Bernoulli分布。

为了保证无论何时模型给出错误的答案,总能有一个较大的梯度,而不是梯度为0。因此sigmoid输出单元定义为: \[ y' = \sigma(w^Th+b) \] 这里sigmoid输出单元有两个部分,一个是线性层,另一个则是使用sigmoid激活函数将z转换为概率。

用于Multinoulli输出分布的softmax单元

任何时候,当我们想要表达一个具有n个可能取值的离散型随机变量的分布时,我们都可以使用softmax函数。

其形式为: \[ softmax(z)_i = \frac{exp(z_i)}{\sum_j exp(z_j)} \] softmax输出的综合为1,所以一个单元的值增加必然对应这其它单元值的减少。