(Tensorflow之四)**函数、交叉熵及优化器

一、**函数

**函数的主要作用是提供网络的非线性建模能力。如果没有**函数,那么该网络仅能够表达线性映射,此时即便有再多的隐藏层,其整个网络跟单层神经网络也是等价的。因此也可以认为,只有加入了**函数之后,深度神经网络才具备了分层的非线性映射学习能力。 那么**函数应该具有什么样的性质呢?

可微性: 当优化方法是基于梯度的时候,这个性质是必须的。
单调性: 当**函数是单调的时候,单层网络能够保证是凸函数。

1.1 sigmoid函数

f(x)=11+ex

(Tensorflow之四)**函数、交叉熵及优化器
标准的sigmoid函数取值范围在(0,1)之间,即将x映射在(0,1)之间分布。在实际运用中,可调整输出值分布的区间,如下公式所示:
f(x)=A1+ex

则其分布区间在:(0,A)之间;

1.2 softmax函数

将N维的向量值[X1,X2,,XN]映射至0~1区间[Y1,Y2,..,YN],其中Y1+Y2++YN=1; 映射方法如下公式如示;

yi=eain1eaj

为什么要采用这么复杂的公式,不直接用如下线性的映射方法呢?
yi=ain1aj

主要的原因是在深度学习时,大多采用反向传播的方法,此时需要Loss函数N阶可导,ex导数是直自身,求导较为简便,同时ex也是单调递增函数也能反应出向量中元素xi的概率值。
注意:softmax只是一种映射的方法,其本身并不是Loss函数

二、交叉熵

交叉熵可理解为衡量预测概率P与直接概率q之间距离的一种方法,公式如下:
例如,对于3维数组的概率p为[0.5,0.3,0,2],而真实分布概率q为[0.3,0.2,0.5],那么p之间的距离是多少呢?我们不能通过简单的加减法得到,而交叉熵函数则提供了一种计算方法,计算如下:
H(p,q) = -(0.5*log0.3+0.3*log0.2+0.1*log0.5)
若另有3维数组的概率p1为[0.3,0.2,0.5],那么其交叉熵为
H(p,q) = -(0.3*log0.3+0.2*log0.2+0.5*log0.5)
在深度学习中,可以将交叉熵作为Loss函数,目标减少p与q之间的距离;

三、优化器

3.1 梯度下降法GradientDescentOptimizer

原理:若函数f(x,y,z)可导,则(αf/αx0, αf/αy0, αf/αz0)为函数在点(x0,y0,z0)中变化最快的方向。
对于深度学习,往往是求Loss函数是最小值,即函数f(x,y,z)的极小值点。在一定的区间内,越接近极值点时,梯度值越小,变化越慢,而越远离极值点时,变化越快,从而可以实现Loss函数有方向的收敛。
(Tensorflow之四)**函数、交叉熵及优化器

3.2 AdagradOptimizer

原理:基于梯度下降法,对梯度值的选取进行了优化。优法方法如下:

Δθ=Rt1i=1g2i+ϵgt

式中:
Δθ为每次优化的调整量;
R为设定的全局学习速率;
ϵ为防止为零时的常量;
gt为求得的梯度值;
gi为前n次求得的梯度值;
由此公式可知:
Δθ的变化受限于之前所有的梯度值。前期时,Δθ较大,而后期Δθ越来越小,该变化规律与深度学习的变化规律是一致的;
优点:若前期Δθ较小时,可以通过学习率方大梯度,加速收敛;而后期Δθ若较大,会因累积使之趋于稳定;
缺点:容易陷于局部最优,后期Δθ因累积趋于零,提前结束学习;

3.3 MomentumOptimizerOptimizer

原理:基于梯度下降法,对于梯度值进行优化,优化方法如下:

Δθt=Υtg0+Υt1g1+Υt2g2+...+Υ0gn

式中:
Υ为冲量的衰减程度;
g0为每轮求得的梯度值;
t为迭代的轮数;
冲量优化法会累积之前所有梯度值,根据衰减程序叠加入优化的步长Δθ中,使得梯度值不会产生较大的振荡;
(Tensorflow之四)**函数、交叉熵及优化器
(Tensorflow之四)**函数、交叉熵及优化器

3.4 AdamOptimizer

原理:基于梯度下降法,对于梯度值进行优化,优化方法类似矩估计法:

mt=μmt1+(1μ)gt

nt=νnt1+(1ν)g2t

mt=mt1μt

nt=nt1νt

Υ=mtnt+ϵgt

mtnt类似对梯度的一阶与二阶进行矩估计,从而对调整梯度值。这么调整有啥好处??还得研究一下吧。。

3.5 RMSPropOptimizer

原理:同样,也是基于梯度法,优化了梯度值
求梯度的平均和

E|g2|t=ρE|g2|t1+(1ρ)g2t

再求随机均根
RMS|g2|t=E|g2|t+ϵ

将RMS均根做为学习率的约束
Δθ=ηRMS|g2|tgt

3.6 优化器的总结

上述的总总优化器,最基本的方法基实就是采用梯度法,其他的优化器都是对梯度法的调整步长进行改进。至于改进的效果怎么样,具体问题具体分析。

4 学习率

在Tensorflow中,所有的优化器,都需设定学习率。学习率并非是多高深的东西,其实就是对所求得的梯度值进行权重的调整。
例:设梯度向量法所求得的梯度值为gt,其调整步长:

Δθ=Rategt

学习率就是上述的Rate值,学习率越大,则单次调整步长越大,可以会导致函数振荡而无法收敛;而学习率过小的话,调整步长太长,收敛速率慢,需更多的训练次数。