pydata

Keep Looking, Don't Settle

tensorflow简介--01

介绍

我们将会用一个非常简单非实际的问题来帮助理解机器学习和tensorflow(TF)。我们使用一个feature(变量)房屋面积来预测房屋价格。这样将避免讨论高维数据,让我们可以集中理解TF中定义模型,应用模型和训练模型。

(原文中都写的是machine learning,机器学习。尽管现在大家都管TF为深度学习框架,我仍然翻译成机器学习。)

机器学习简介

我们从下面收集的一组数据开始。下图每一个点表示两个值--一个outcome(房屋价格)和一个影响feature(房屋面积)。 png

然而,我们不知道那些不在图上的features点对应的价格。 png

我们可以使用机器学习来发现两个之间的关系,这样的话给定一个feature点,我们可以精确的预测出结果。 png

第一步,选择模型

模型类型

要进行预测,我们需要选择一个模拟可以最好的拟合我们上面收集的数据。

我们可以选择一个线性模型,然后通过调整斜率和截距来拟合那些点。 png

我们也可以选择一个指数模型,然后通过调整曲率和位置来拟合那些点。 png

损失函数

要比较哪个模型拟合更好,我们定义最佳拟合为损失函数,我们要最小化这个损失函数。一个损失函数的例子是真实值和预测值的差的绝对值的和(数学上也叫L1)。也就是下图中那些蓝色线的和就是。 png

注意:更通常的损失函数是距离的平方和,也就是最小二乘。

线性模型简介

为了简单化问题,我们用线性模型来拟合数据。一个线性模型何以数学的表达为

y = W.x + b
Where:
x: house size, in sqm
y: predicted house price, in $

要调整参数来拟合数据,我们可以

  • 调整W来改变线性模型的梯度 png

  • 调整b来改变位置 png

通过选择不同的Wb,我们可以最终选者一个最合适的模型来最小化损失函数。除了随机的选择Wb,我们有没有更好的办法来尝试Wb

梯度下降

如果你在山上的一个平台上,当你想下降到最低点的时候,你的视野是这样的 png

下降的方向是不明了的!这样最好的办法就是梯度下降(gradient descent):

  • 在当前位置找到最陡峭的方向最为梯度方向
  • 沿着选择的方向走一步,步长为X
  • 重复上面的办法,这就是training

最小化损失函数也相似。下图中,损失函数就像那个山一样起伏,我们的目的是找到最低点。通过梯度下降,我们可以做到这一点。 png

有了线性模型,损失函数,和梯度下降这些概念,我们可以进一步学习TF了。

第二步:TF中建模

TF中线性模型

TF的两个基本概念是:

1. placeholder: 表示进行梯度下降算法的时候,输入模型中的实际值。在上面的例子中,也就是房屋面积(x)和房屋价格(y_)。

png

2. variable:表示损失函数中我们要寻找最佳值的那些变量,也就是上例中的Wbpng

在TF中线性模型y = W.x + b表示为 png

TF中的损失函数

类似于把真实房屋价格输入到模型中,我们建立一个placeholder: png

我们的最小二乘损失函数可以表示为 png

数据

因为我们没有实际的房屋价格(y_)和房屋面积(x),我们模拟出它们的值 png

模拟的时候,我们假设房屋价格是房屋面积的2倍。

梯度下降

有了线性模型,损失函数,数据,我们就可以用梯度下降来最小化损失函数,寻找到最优的W和b。

png

0.00001就是梯度下降中的沿着最陡峭方向的步长,也叫learning rate

第三步:训练模型

训练模型包括按照预先设置的迭代次数进行梯度下降,或者直到损失函数小于一个预先给定的值。

TF Quirks

所有的variable都要给定初始值,否则的话他们可能保持上次迭代的值 png

TF Session

尽管TF是一个python库,python是一个解释型的语言,但是因为性能原因,TF默认却不能执行解释运算。所以上面的init并没有执行。TF在session里面执行,建立一个session(sess)然后执行的话使用sess.run() png

类似的,我们通过调用sess.run()里的循环来执行train_step. png

你需要把实际值输入到x,y_组成的feed里面去,这是因为TF把解出来的train_step放入他的dependencies里: png

dependencies的底部就是x, y_的placeholders.我们已经知道,tf.placeholders是用来输入实际的房屋价格(y_)和房屋面积(x)的。

结果

我们打印出循环里的值来显示TF怎么找到最佳的Wb的。 png

总结

我们学习了机器学习的最简单的模型,用一个feature来预测结果。为了简化问题,我们使用了线性模型来拟合数据。然后定义一个损失函数来找到最佳拟合。最后通过梯度下降来找到variableWb的最佳估计。

下一步

在下一篇文章,我们将会

  • 设置Tensor Board来可视化TF的执行,这样可以检测到我们模型,损失函数和梯度下降的问题

  • 分批(batches)输入数据来训练模型(而不是每次输入一个数据点),并且展示这样会怎么影响结果

Reference

  1. Gentlest Introduction to Tensorflow #1