利用TensorFlow解决线性回归问题
利用TensorFlow解决线性回归问题之前需要介绍一些概念。
用数学方法解决线性回归问题,其本质是最小化一个损失函数,通过最小二乘法直接计算损失函数对应参数的数学解。但是很多机器学习的模型是求不到这样的数学解的,那么基于这样的模型,就需要使用一种基于搜索的策略来找到这个最优解。梯度下降法就是机器学习领域最小化损失函数的一个最为常用的方法。
线性函数的形式为,根据这个函数形式推导出它的损失函数为。但是这个损失函数是有问题的,如果有150个点,则可得到一个损失值L,而如果有15000个点,那么损失L会很大。损失函数的值与样本数据的数量是不应该有关系的,所以,对损失函数的值求平均值得到新的损失函数值,那么损失函数值的大小和样本数据的数量就没有关系了,得到新的损失函数为。寻找使损失值L最小的W和b的过程称为最优化(Optimization)。最优化的过程可以比作:一个蒙着眼睛的人在山地上行走,目标是要走到山底,他只能通过感受地形的变化一点一点地完成目标。在数学上,地形变化是不需要猜测的,可以计算出来,最陡峭的方向称为损失函数的梯度(Gradient)。在一维函数中,斜率是函数在某一点的瞬时变化率,梯度是函数斜率的一般化表达,它是一个向量,表示某一函数在该点处的方向,导数沿着该方向取得最大值,即函数在该点处沿着该方向(该梯度的方向)变化最快,变化率最大(为该梯度的模)。由于损失函数值需要减小,所以需要向着梯度的负方向更新,这个方法称为梯度下降法。
下面依然来看蒙着眼睛下山的例子,下山时迈不同大小的步子会导致下到山底所花费的时间不一样。如果迈的步子太大,会导致找不到最低点,一直在最低点左右徘徊;步子太小,虽然能更好地找到最低点,但是过程会比较漫长。这个步长就是学习率。