深度学习入门教程(5)Tensorflow简单非线性回归

上一篇说了线性回归问题,也就是因变量和各个自变量都是线性关系,那么这篇文章来介绍非线性关系。

为什么需要非线性关系?

线性关系固然简单,但是简单的线性组合并不能表达出真实生活中会接触到的复杂函数。往往一个现实问题设计的自变量成百上千,而他们之间的关系也并不是简单的线性组合,这就导致了真实因变量的复杂性十分高。

神经网络:

我们知道,对于一个程序来说有基本公式:输入+程序=输出。

我们用一个例子来说明神经网络可以做些什么:比如你现在要根据往年的大数据预测房价,但大批量数据对于人类的分析能力而言是比较大的挑战,但是我们可以猜测影响因素,一般影响房价的因素有:大小,附近交通,附近经济......很显然的是,这个房价函数是一个多元函数,这个时候,我们直接去猜测他的函数是很不切实际的。这个时候我们可以将各项参数量化,交由神经网络去不断迭代减少误差,虽然我们不可以直接得到函数,但是我们可以获得与实际值相差无几的预测模型。

神经网络基本公式:深度学习入门教程(5)Tensorflow简单非线性回归

我们将用神经元的概念类比来理解神经网络:

一个神经元干的事:

深度学习入门教程(5)Tensorflow简单非线性回归

Y=W*X+B

一堆神经元干的事

深度学习入门教程(5)Tensorflow简单非线性回归

上图中,X1和X2是两个自变量,Y是最终要得到的因变量,X1和第二层4个神经元的连接权重分别为A1、A2、A3、A4(为避免图上混乱没有全部画出),X2和第二层4个神经元的连接权重分别为B1、B2、B3、B4(为避免图上混乱没有全部画出),因此第二层四个神经元的输出为:

深度学习入门教程(5)Tensorflow简单非线性回归

第三层请自行类推作为复习。

我们把每条连接线上的权重以矩阵的方式组织起来就得到了权重矩阵W。

但是一般习惯上,由于网络本身的表示就像是每一层输出的都是一个列向量,因此我们将输出层的数据纵向堆叠形成列向量,而为了和新的向量进行运算,我们要将原权重矩阵进行转置,神经网络的公式变化为深度学习入门教程(5)Tensorflow简单非线性回归

非线性关系将导致我们引出另一个概念:**函数

假设我们有三层网络,每一层网络的权重矩阵为Wi,偏置矩阵为Bi,那么第一层的输出为Y1=W1*X+B1,第二层的输出为Y2=W2*Y1+B2,第三层的输出为Y3=W3*Y2+B3,如果我们把第三层的式子展开,则可以得到Y3=W3*(W2*(W1*X+B1)+B2)+B3。

化简之后得到Y3=W3*W2*W1*X+W3*W2*B1+W3*B2+B3,我们可以发现,因变量Y3和自变量X依旧是线性关系。因此我们引入了**函数的概念,使得自变量与因变量之间不成线性关系,从而可以更好地表达复杂函数。

常用的**函数有sigmod,relu,tanh等。未完待续。。。。。。