(Tensorflow之四)**函数、交叉熵及优化器
一、**函数
**函数的主要作用是提供网络的非线性建模能力。如果没有**函数,那么该网络仅能够表达线性映射,此时即便有再多的隐藏层,其整个网络跟单层神经网络也是等价的。因此也可以认为,只有加入了**函数之后,深度神经网络才具备了分层的非线性映射学习能力。 那么**函数应该具有什么样的性质呢?
可微性: 当优化方法是基于梯度的时候,这个性质是必须的。
单调性: 当**函数是单调的时候,单层网络能够保证是凸函数。
1.1 sigmoid函数
标准的sigmoid函数取值范围在(0,1)之间,即将x映射在(0,1)之间分布。在实际运用中,可调整输出值分布的区间,如下公式所示:
则其分布区间在:(0,A)之间;
1.2 softmax函数
将N维的向量值
为什么要采用这么复杂的公式,不直接用如下线性的映射方法呢?
主要的原因是在深度学习时,大多采用反向传播的方法,此时需要Loss函数N阶可导,
注意: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函数有方向的收敛。
3.2 AdagradOptimizer
原理:基于梯度下降法,对梯度值的选取进行了优化。优法方法如下:
式中:
由此公式可知:
优点:若前期
缺点:容易陷于局部最优,后期
3.3 MomentumOptimizerOptimizer
原理:基于梯度下降法,对于梯度值进行优化,优化方法如下:
式中:
冲量优化法会累积之前所有梯度值,根据衰减程序叠加入优化的步长
3.4 AdamOptimizer
原理:基于梯度下降法,对于梯度值进行优化,优化方法类似矩估计法:
3.5 RMSPropOptimizer
原理:同样,也是基于梯度法,优化了梯度值
求梯度的平均和
再求随机均根
将RMS均根做为学习率的约束
3.6 优化器的总结
上述的总总优化器,最基本的方法基实就是采用梯度法,其他的优化器都是对梯度法的调整步长进行改进。至于改进的效果怎么样,具体问题具体分析。
4 学习率
在Tensorflow中,所有的优化器,都需设定学习率。学习率并非是多高深的东西,其实就是对所求得的梯度值进行权重的调整。
例:设梯度向量法所求得的梯度值为
学习率就是上述的