TensorFlow

TensorFlow是一个机器学习框架,它提供了一门机器学习速成课程。  
官方网址:https://developers.google.cn/machine-learning/crash-course/  
本文按照谷歌提供的机器学习速成课程记录学习笔记。

线性回归

基本概念

下图展示了蟋蟀每分钟的鸣叫声与温度(摄氏度)的关系。

为了清楚地显示鸣叫声与温度之间的关系,创建公式:
$$y=mx+b$$
其中:

  • $y$:指的是温度(以摄氏度表示),即我们试图预测的值。
  • $m$:指的是直线的斜率。
  • $x$:指的是每分钟的鸣叫声次数,即输入特征的值。
  • $b$:指的是 y 轴截距。

将上面代数公式,转换为机器学习样式的方程:
$$y^{’}=b+w_{1}x_{1}$$
其中:

  • $y_{’}$:指的是预测标签(理想输出值)。
  • $b$:指的是偏差(y 轴截距)。而在一些机器学习文档中,它称为 。
  • $w_{1}$:指的是特征 1 的权重。权重与上文中用 表示的“斜率”的概念相同。
  • $x_{1}$:指的是特征(已知输入项)。

延伸到多个特征的情况:
$$y^{’}=b+w_{1}x_{1}+w_{2}x_{2}+w_{3}x_{3}$$

损失

平方损失

平方损失又叫$L_{2}$损失。

  • 红色箭头表示损失
  • 蓝线表示预测

单个样本的平方损失:$${ \left( y-{ y }^{ ’ } \right) }^{ 2 }$$

均方误差

均方误差 (MSE) 指的是每个样本的平均平方损失。
$$MSE=\frac{1}{N} \sum_{(x,y) \in D} {(y-prediction(x))^{2}}$$
其中:

  • $(x,y)$指的是样本,其中:
  • $x$指的是模型进行预测时使用的特征集(例如,温度、年龄和交配成功率。
  • $y$指的是样本的标签(例如,每分钟的鸣叫次数)。
  • $prediction(x)$指的是权重和偏差与特征集$x$结合的函数。
  • $D$指的是包含多个有标签样本(即$(x,y)$)的数据集。
  • $N$指的是$D$中的样本数量。

虽然 MSE 常用于机器学习,但它既不是唯一实用的损失函数,也不是适用于所有情形的最佳损失函数。

降低损失

迭代方法

下图显示了机器学习算法用于训练模型的迭代试错过程:

我们应该为$b$和$w_{1}$设置哪些初始值?
$$y^{’}=b+w_{1}x_{1}$$
通过迭代方式来降低损失,就是不停的试错,直到得到损失最小的模型。

梯度下降法

根据迭代算法的思想,计算$w_{1}$所有可能值的损失。

损失与$w_{1}$的图形始终是凸形的,随着$w_{1}$的增大,损失从大变小,再变大的一个过程。

凸形问题只有一个最低点;即只存在一个斜率正好为 0 的位置。这个最小值就是损失函数收敛之处。
通过计算整个数据集中 每个可能值的损失函数来找到收敛点这种方法效率太低。
我们来研究一种更好的机制,这种机制在机器学习领域非常热门,称为梯度下降法
梯度下降法算法会沿着负梯度的方向走一步,以便尽快降低损失。

梯度矢量具有方向和大小。梯度下降法算法用梯度乘以一个称为学习速率(有时也称为步长)的标量,以确定下一个点的位置。
如果您选择的学习速率过小,就会花费太长的学习时间。

相反,如果您指定的学习速率过大,下一个点将永远在 U 形曲线的底部随意弹跳,就好像量子力学实验出现了严重错误一样。

随机梯度下降法

在梯度下降法中,批量指的是用于在单次迭代中计算梯度的样本总数。到目前为止,我们一直假定批量是指整个数据集。就 Google 的规模而言,数据集通常包含数十亿甚至数千亿个样本。此外,Google 数据集通常包含海量特征。因此,一个批量可能相当巨大。如果是超大批量,则单次迭代就可能要花费很长时间进行计算。

包含随机抽样样本的大型数据集可能包含冗余数据。实际上,批量大小越大,出现冗余的可能性就越高。一些冗余可能有助于消除杂乱的梯度,但超大批量所具备的预测价值往往并不比大型批量高。

如果我们可以通过更少的计算量得出正确的平均梯度,会怎么样?通过从我们的数据集中随机选择样本,我们可以通过小得多的数据集估算(尽管过程非常杂乱)出较大的平均值。 随机梯度下降法 (SGD) 将这种想法运用到极致,它每次迭代只使用一个样本(批量大小为 1)。如果进行足够的迭代,SGD 也可以发挥作用,但过程会非常杂乱。“随机”这一术语表示构成各个批量的一个样本都是随机选择的。

小批量随机梯度下降法(小批量 SGD)是介于全批量迭代与 SGD 之间的折衷方案。小批量通常包含 10-1000 个随机选择的样本。小批量 SGD 可以减少 SGD 中的杂乱样本数量,但仍然比全批量更高效。

TF的基本介绍

TensorFlow工具包层次结构:

不同层的用途:

工具包 说明
Estimator (tf.estimator) 高级 OOP API
tf.layers/tf.losses/tf.metrics 用于常见模型组件的库
TensorFlow 低级 API

TensorFlow 由以下两个组件组成:

  • 图协议缓冲区
  • 执行(分布式)运行

这两个组件类似于 Java 编译器和 JVM。正如 JVM 会实施在多个硬件平台(CPU 和 GPU)上一样,TensorFlow 也是如此。

tf.estimator API

tf.estimator API是TF的高级API,代码行数少,易于使用,但是设计不够灵活。
tf.estimator 与 scikit-learn API 兼容。  
本文中主要使用tf.estimator API学习TensorFlow。