目录
一、深度学习与深层神经网络
深度学习是指一类通过多层非线性变换对高复杂性数据建模算法的合集,深层神经网络就是实现多层非线性变换最常用的一种方法。而深度学习两个最重要的特性就是多层和非线性。
-
非线性
在上一篇最后所建立的神经网络即为线性的,但是在现实世界中,绝大多数的问题时无法线性分割的,因此需要一个激活函数(Activation)来使其变得非线性化。
在TF中提供了7种不同的非线性激活函数,tf.nn.rule、tf.sigmoid、tf.tanh是其中比较常用的几个。同时TF也支持自己定义激活函数,以下为其用法,其中biases为偏置项:
a = tf.nn.relu(tf.matmul(x, w1) + biases1)
y = tf.nn.relu(tf.matmul(a, w2) + biases2)
- 多层
深度学习的另外一个重要性质是多层变换,在输入层和输出层之间加入若干个隐藏层,深层神经网络有组合提取的功能,对于不易解决提取特征向量的问题有很大帮助。
二、损失函数定义
神经网络模型的效果以及优化的目标是通过损失函数来定义的。分类问题和回归问题是监督学习的两大种类。针对不同的问题使用不同的损失函数来优化模型。
交叉熵
对于分类问题,一般使用交叉熵(corss entropy)来判断一个输出向量和期望向量有多接近。交叉熵刻画了两个概率分布之间的距离,然而神经网络的输出却不一定是一个概率分布。在TF中,使用Softmax回归作为额外的处理层得到概率分布的输出结果。
其中p代表正确答案,q代表有softmax给出的概率分布。假设正确答案(1,0,0),预测结果(0.5,0.4,0.1)。则其交叉熵为。通过TF代码实现如下:
corss_entropy = - tf.reduce_mean(y_, tf.log(tf.clip_by_value(y, 1e-10, 1.0)))
#其中y_代表真实结果,y代表预测结果。
#tf.clip_by_value(y, 1e-10, 1.0)可以将y值限定在一个范围
##若y小于1e-10,则y=1e-10.y大于1.0同理
#tf.log求对数
#tf.reduce_mean求均值
TF对softmax和cross_entropy进行了封装,提供了一个函数tf.nn.softmax_cross_entropy_with_logits来实现求得Softmax回归之后的交叉熵:
corss_entropy = tf.nn.softmax_cross_entropy_with_logits(logits=y, labels=y_)
#在只有一个正确答案的分类问题种,可以使用以下函数加速计算过程
cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=y, labels=y_)
均方误差(MSE,mean squared error)
对于回归问题,比如房价预测、销量预测等等,最常用的损失函数是均方误差(MSE,mean squared error)。它的定义为