目录
第四章——深层神经网络
4.1深度学习与深层神经网络
维基百科对深度学习的精确定义为“一类通过多层非线性变换对高复杂性数据建模算法的合集”。
深度学习有两个非常重要的特性:多层和非线性。
4.1.1线性模型的局限性
在线性模型中,模型的输出为输入的加权和。假设一个模型的输出y和输入x满足,那么这个模型就是一个线性模型。被称为线性模型是因为当模型的输入只有一个的时候,x和y会形成二维坐标系上的一条直线。类似的,当模型有n个输入时,x和y形成了n+1维空间中的一个平面。而一个线性模型中通过输入得到输出的函数被称为一个线性变换。
线性模型的最大特点是任意线性模型的组合仍是线性模型。因此,只通过线性变换,任意层的全连接神经网络和单层神经网络模型的表达能力没有任何区别,并且都是线性模型。(就是说,只有一层神经网络就可以等同于任意层的全连接神经网络,只要这一层中神经元个数足够多,就可以达到任意层的全连接神经网络模型的表达能力)
如果一个问题可以通过一条直线来划分,那么线性模型就可以用来解决这个问题。所谓复杂问题,至少是无法通过直线(或者高维空间的平面)划分的,在现实生活中,绝大部分的问题都是无法线性分割的。
上图左为线性可分,右为线性不可分。
4.1.2激活函数实现去线性化
如果将每一个神经元(也就是神经网络中的节点)的输出通过一个非线性函数,那么整个神经网络模型也就变成非线性模型了,这里用的非线性函数就是激活函数。
比如,对于上面的线性不可分问题,使用ReLU激活函数后效果如下:
常用的激活函数:
目前TensorFlow提供了多种不同的非线性激活函数,如tf.nn.relu,tf.sigmoid,tf.sigmoid,tf.tanh等。
4.1.3多层网络解决异或问题
异或问题直观来说就是如果两个输入的符号相同时(同时为正或者同时为负)则输出为0,否则(一正一负)输出为1.
单层神经网络无法解决异或问题,而有了隐藏层的多层神经网络可以解决异或问题。
深层神经网络实际上有组合特征提取的功能,这个特性对于解决不易提取特征向量的问题(比如图片识别、语音识别等)有很大帮助。这也是深度学习在这些问题上更加容易取得突破性进展的原因。
4.2损失函数定义
神经网络模型的效果以及优化的目标是通过损失函数(loss function)来定义的。
4.2.1经典损失函数
分类问题和回归问题是监督学习的两大种类。
分类问题是预测离散值的输出,如0,1,2,......。
回归问题预测的连续值输出,是具体数值,如房价,销售值等。
分类问题
通过神经网络解决多分类问题最常用的方法使设置n个输出节点,其中n为类别的个数。对每一个样例,神经网络可以得到一个n维数组作为输出结果。数组中的每一个维度(也就是每一个输出节点)对应一个类别。在理想情况下,如果一个样本属于类别k,那么这个类别所对应的输出节点的输出值应该为1,而其他节点的输出都为0。如MNIST手写识别one_hot编码,对应位数的数值为1, [0,0,1,0,0,0,0,0,0,0,0],神经网络模型的输出结果越接近 [0,0,1,0,0,0,0,0,0,0,0]越好。
那么判断一个输出向量和期望的向量有多接近,交叉熵(cross entropy)是常用的评判方法之一。交叉熵刻画了两个概率分布之间的距离,它是分类问题中使用比较广的一种损失函数。
给定两个概率分布p和q,通过q来表示p的交叉熵为:
交叉熵刻画的是两个概率分布之间的距离,然而神经网络的输出却不一定是一个概率分布。概率分布刻画了不同事件发生的概率。当时间总数是有限的情况下,概率分布函数 p(X=x)p(X=x)满足: (及所有情况概率和为1)
如何将神经网络前向传播得到的结果变为概率分布呢?Softmax回归就是一个非常常用的方法。
Softmax本身可以作为一个学习算法来优化分类结果,但在TensorFlow中,Softmax回归的参数被去掉了,它只是一层额外的处理层,将神经网络的输出变为一个概率分布。
假设原始的神经网络输出为y1,y2,y3.。。。yn,那么经过Softmax回归处理后输出变为:
这个新的输出可以理解为经过神经网络的推导,一个样例为不同类别的概率分别为多大,这样就把神经网络的输出也变成了一个概率分布,从而可以通过交叉熵来计算预测的概率分布和真实答案的概率分布之间的距离了。
交