今天我们来讲讲线性回归和神经网络的关系。
首先说结论,线性回归其实也是个神经网络,其实不光是线性回归,多项式回归,逻辑回归等等也都可以看成是一个神经网络。
考虑到大家可能对线性回归或者神经网络的概念有那么点疑惑,这里简单的讲讲什么是线性回归和神经网络。
如图所示,我们可以很轻易的看出来,y轴上的变量正随着x的变大而变大,这似乎是一个趋势,但是我们需要如何去描述这个趋势呢?
我们不仅希望我们能够描述出这个趋势,还希望能够根据这个趋势做出相应的预测。
比如x = 100的时候,相应的y是多少呢?
这个时候线性回归就非常的重要了。我们观察到,这些数据点似乎是线性增长的,即y随着x的增大而增大,我们似乎是能够用一条直线来表示它。
比如这样:
当然还可以是这样:
其实吧,照这样搞下去,可以画成任何样子,只要是个直线就行。
但是,人们希望,这条直线能够最好的表现整个数据的趋势,也就是说人们希望,预测点的距离和样本点的距离尽可能的小。如下图所示。
于是乎人们就有了一个想法,既然我们希望预测点和样本点的误差(即距离)尽可能小,那答案岂不是呼之欲出。答案就是将每个预测点和样本点的距离相减,然后将他们加起来,然后我们想办法改变其中的参数,使得它们的和达到一个最小值不就行了吗?最终,人们采取的做法就是如下公式。(这个公式叫做均方误差,我们也经常称其为损失函数,你可能还见过这个公式的其他写法,其实他们都大同小异)
这里的y_pred,其实就是我们预测出来的值,也就是我们画的直线上的点。我们在初中就学过了,一条直线可以用一个函数表示即y = a*x + b。其中x就是我们x轴上的x,a和b就是我们需要调整的参数,我们不断的调整a和b参数的值,我们就能改变均方误差的大小,我们的目的就是使均方误差达到最小化。至于怎么调整参数使得均方误差达到最小,那就有点复杂了,我们就不展开了,就稍微提一下,数学家喜欢采用最小二乘法来求解最优参数,而实际应用中,我们多采用一种叫梯度下降的方法来优化参数,使其达到最小值。
接下来我们来聊聊什么是神经网络。
神经网络,顾名思义,是受了生物学的启发。(注意,只是受到了启发,实际上我们现在说的人工神经网络和真实生物神经网络差异巨大)
简单说一下就是,生物神经元用电传递信号,树突部分接收信号,神经元的细胞体处理信号,然后信号再由轴突,轴突末梢传递到下一个神经元。
这种模式完全可以抽象成一个三层模型。
第一层是输入层,第二层是处理层,第三层是输出层。
简单说来就是干这么几件事,输入数据,处理数据,输出数据。
然后我们的人工神经元就诞生了。
如图所示,这个图是一个简单的人工神经元,但是,它完全可以做到任何线性回归能做到的事情。
这个神经元的工作流程是这样的,首先,输入x和1,在传输的线路上,它们被赋予了不同的权重也就是a*x和b*1,这相当于,生物信号传递过程中信号有大有小。
经过不同信道上权重的过滤,它们到达了细胞体内,细胞体内对它们的暂时处理是相加,也就变成了,a*x + b*1,然后输出。
于是输出变成了y = a * x + b,如果我们对其求均方误差,很明显这和我们之前说的线性回归是一模一样的。
同理,我们可以增加输入信号(当然也可以加输出信号),使得整个神经元更加复杂,这样神经元的表示能力就更加强了。如果你学过多元线性回归,多项式回归等等,你会发现,这些都可以用一个人工神经元来表示,道理和刚才讲的一元线性回归是一样的。
实际上我们通常将神经网络的输入和权重分别用一个矩阵来表示,使用矩阵也就是向量化,在计算机中计算的时候就能并行计算,计算速度会比串行计算速度高很多,例如一元线性回归的输入矩阵可以表示为:
权重矩阵可以表示为:
在计算的时候,两者做个矩阵乘法就完成了。
一个神经元就已经能有如此强大的威力,多个神经元,多层神经网络就更加厉害了。
至于有多厉害我就不吹了,反正,在人工智能时代,吹神经网络的太多了,大家自行百度即可。
希望大家理解了题目,为什么线性回归也是神经网络。