TensorFlow入门笔记(七) : 深度学习与深层神经网络

深度学习的定义 : 一类通过多层非线性变换对高复杂性数据建模算法的合集。因为深层神经网络是实现“多层非线性转换”最常用的一种方法。所以在实际中基恩可以认为深度学习就是深层神经网络的代名词,深度学习有两个非常重要的特性,一个是深层,一个是非线性。

线性模型的局限性

在线性模型中,模型的输出为输入的加权和,假如一个模型y和输入xi满足一下关系,这个模型就是线性模型。

《TensorFlow入门笔记(七) : 深度学习与深层神经网络》

被称之为线性模型是因为当模型的输入只有一个的时候,x和y形成了二维坐标上的一条直线,类似的,当模型有n个输入的时候,x和y就形成了n+ 1维空间中的一个平面。而一个线性模型中通过输入输出得到的输出函数被称为一个线性转换。上面的公式就是一个线性转换。线性模型的最大特点是任意线性模型的组合仍然还是一个线性模型。

其实我们之前做过的多层神经网络小例子本质上来说也是一个线性模型,为了方便我直接截取了书中的文字。

《TensorFlow入门笔记(七) : 深度学习与深层神经网络》
《TensorFlow入门笔记(七) : 深度学习与深层神经网络》

其实 W 撇是新参数。这个向前传播算法完全符合线性模型的定义。从这个例子可以看到,虽然这个神经网络有两层的(不算输入层),但是他和单层的神经网络没有区别。以此类推,值通过线性交换,任意层的全连接神经网络和单层神经网络在表达上没有任何区别,而且他们都是线性模型。然而线性模型能够解决的问题是有限的,这就是线性模型最大的局限性,这也是为什么深度学习强调非线性。

还是以判断零件是否合格为例,输入的x1和x2,其中x1代表一个零件质量和平均质量的差,x2代表一个零件长度和平均长度的差。假设一个零件的质量以及长度离平均质量及长度越近,那么这个零件就越有可能合格。于是训练数据可能服从下图分布。

《TensorFlow入门笔记(七) : 深度学习与深层神经网络》
《TensorFlow入门笔记(七) : 深度学习与深层神经网络》

上图越靠近中心的点,就是黑色的点代表合格的零件,而灰色的点代表不合格的零件,可以看到虽然黑色和灰色有一定的重合,但是大部分代表合格零件的的黑色点都在原点(0,0)附近,而代表不合格的灰色点都在离原点相对较远的地方,这样的分布比较接近真实问题,因为大部分事件都有一定的趋势,但是很难甚至无法完全正确的区分不同的类别。

对于上图我们可以用TensorFlow游乐场使用线性模型(Linear)跑一下

《TensorFlow入门笔记(七) : 深度学习与深层神经网络》
《TensorFlow入门笔记(七) : 深度学习与深层神经网络》

经过训练之后无法收敛,说明对于这个数据集,我们采用线性函数十分不合理。我们换一个数据集

《TensorFlow入门笔记(七) : 深度学习与深层神经网络》
《TensorFlow入门笔记(七) : 深度学习与深层神经网络》

这个数据集使用线性函数效果就非常好,颜色区分边界明显。

下面我们使用非线性函数来测试一下之前用线性无法分类的数据集。

《TensorFlow入门笔记(七) : 深度学习与深层神经网络》
《TensorFlow入门笔记(七) : 深度学习与深层神经网络》

有了不错的分类效果。

激活函数实现去线性化

通过上边的例子我们已经发现激活函数的重要作用了,在以往的例子中我们把神经元的输出为所有输入的加权求和,其实这导致我们的整个神经网络其实是一个线性模型,如果将一个神经元(也就是神经网络中的节点)的输出通过一个非线性函数,那么整个圣经网络的模型就不再是线性的了,这个非线性函数就是激活函数。

《TensorFlow入门笔记(七) : 深度学习与深层神经网络》
《TensorFlow入门笔记(七) : 深度学习与深层神经网络》

将之前常用的区分零件是否合格的小例子加上前置项 b 和激活函数 (手动函数符号f)

《TensorFlow入门笔记(七) : 深度学习与深层神经网络》
《TensorFlow入门笔记(七) : 深度学习与深层神经网络》

整理后(矩阵乘法,矩阵加法)得到

《TensorFlow入门笔记(七) : 深度学习与深层神经网络》
《TensorFlow入门笔记(七) : 深度学习与深层神经网络》

上面的定义和之前的例子主要有两个改变,一个是在公式中添加了偏置项,一个是在每个节点的输出的加权和的基础上做了一个非线性转换。下面展示几种非线性激活函数的函数图像。

《TensorFlow入门笔记(七) : 深度学习与深层神经网络》
《TensorFlow入门笔记(七) : 深度学习与深层神经网络》

上图的第一个函数,x < 0 时候 , y = 0 ,这些函数都不是一条直线,所以通过这些激活函数,每一个节点不再是线性转换,于是整个神经网络就不在是线性了。

《TensorFlow入门笔记(七) : 深度学习与深层神经网络》
《TensorFlow入门笔记(七) : 深度学习与深层神经网络》

上图即为添加了前置项和激活函数的零件鉴别合格与否的小例子,前置项可表达为输出永远为1的节点,以下展示这个神经网络向前传播的计算算法。

《TensorFlow入门笔记(七) : 深度学习与深层神经网络》
《TensorFlow入门笔记(七) : 深度学习与深层神经网络》
《TensorFlow入门笔记(七) : 深度学习与深层神经网络》
《TensorFlow入门笔记(七) : 深度学习与深层神经网络》

目前TensorFlow提供了多种非线性函数,tf.nn.relu 、tf.sigmoid、tf.tanh、是比较常用的几个。TensorFlow也支持自己定义激活函数。以下代码展示如何通过TensorFlow实现定义偏置项和激活函数。

a = tf.nn.relu(tf.matmul(x,w1)+biases1)
y = tf.nn.relu(tf.matmul(a,w2)+biases2)

多层网络解决异或运算

通过一个实际问题来了解深度学习的另一个性质—–多层转换,在神经网络发展历史上,一个很重要的问题就是异或问题,神经网络模型理论由某人在1943年首次提出,并在1958年有另一个人提出感知机(perceptron)模型,从数学上完成了对神经网络的精确建模。感知机可以简单的理解为单层的神经网络,没有隐藏层。

感知机会将输入进行加权和,在通过激活函数最后得到输出,没有隐藏层。这种结构无法解决异或问题,所谓的异或问题直观的说就是如果两个输入的符号相同时(同正或者同负),则输出0,否则输出1,可以使用TensorFlow游乐场来模拟一下。下图是一个符合异或条件的数据集。

《TensorFlow入门笔记(七) : 深度学习与深层神经网络》

经过训练之后无法拿出一个让人满意的分类结果。

《TensorFlow入门笔记(七) : 深度学习与深层神经网络》
《TensorFlow入门笔记(七) : 深度学习与深层神经网络》

假如隐藏层之后的分类效果图。

《TensorFlow入门笔记(七) : 深度学习与深层神经网络》
《TensorFlow入门笔记(七) : 深度学习与深层神经网络》

隐藏层的节点可以理解为从输出的特征中抽取的更高纬的特征,比如第4个节点大致代表了俩个输入的逻辑与操作的结果,当两个输入都为正数的时候,该点输出为正数,从这个例子中可以看到,神经网络有组合特性提取的功能。这个特征对与解决不易提取的特征向量的问题有很大帮助,这也是深度学习在解决问题上更容易取得突出进展的原因。

    原文作者:滑稽程序员
    原文地址: https://zhuanlan.zhihu.com/p/72313944
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞