奎克的藏经阁 · MinerU 解析内容

人工智能与大数据技术导论

490 个 PDF 物理页 · 本页显示文件第 321–330 页

PDF 物理页索引 320

文件中的第 321 页 · 印刷页码:304

下面使用EstimatorsAPI来计算模型大小(为了简单起见,就是计算不是0的参数的个数):

下面使用L1正则化来减少模型大小(600),并确保在验证集上的log-loss小于0.35:

人工智能与大数据技术导论

304

PDF 物理页索引 321

文件中的第 322 页 · 印刷页码:305

第9章 TensorFlow 高级知识

305

PDF 物理页索引 322

文件中的第 323 页 · 印刷页码:306

使用 regularization strength=0.1 开始训练:

结果如图9-41、图9-42所示。

人工智能与大数据技术导论

306

PDF 物理页索引 323

文件中的第 324 页 · 印刷页码:307

要注意的是,正则化越强,模型越小,但是会影响分类误差。

第9章 TensorFlow 高级知识

307

PDF 物理页索引 324

文件中的第 325 页 · 印刷页码:未识别

第10章

神经网络

本章,我们以TensorFlow环境为基础,阐述神经网络。

10.1 什么是神经网络

我们在9.1节中提到如图10-1所示的分类问题属于非线性问题。

“非线性”意味着你无法使用形式为 $b + w _ { 1 } x _ { 1 } + w _ { 2 } x _ { 2 }$ 的模型准确预测标签。我们采用特征交叉对非线性问题进行建模,从而解决了如图10-1所示的问题。但是,如果数据集如图10-2所示,那么会怎么样呢?

图10-2所示的数据集问题是一个互相交错的螺旋组合,无法用线性模型解决。我们可以考虑如何添加正确的特征交叉乘积来解决。但很显然,我们的数据集可能会越来越复杂。最终还是希望通过某种方式让模型自行学习非线性规律,而不用我们手动为它们指定参数。这可以通过深度神经网络来实现。深度神经网络可以非常出色地处理复杂数据,例如图片数据、音频数据以及视频数据等。我们将在本章详细了解神经网络。

10.1.1 隐藏层

我们希望模型能够自行学习非线性规律,而不用手动为它们指定参数。这需要神经网络来帮助解决这类非线性问题。那么,什么是神经网络呢?首先用图表呈现一个线性模型,如图10-3所示。

该模型中有一些输入,每个输入都具有一个权重,这些权重以线性方式结合到一起产生输出。每个蓝色圆圈(最下面一层)均表示一个输入特征,绿色圆圈(最上面一层)表示各个输入的加权和。为了提高此模型处理非线性问题的能力,我们可以如何更改它?

PDF 物理页索引 325

文件中的第 326 页 · 印刷页码:309

在图10-4(颜色请参看下载包中的相关文件)所示的模型中,我们添加了一个表示中间值的“隐藏层”。隐藏层中的每个黄色节点(中间层)均是蓝色输入节点(最下面一层)值的加权和。输出的是黄色节点(中间层)的加权和。

此模型是线性的,因为其输出仍是其输入的线性组合。在图10-5所示的模型中,我们又添加了一个表示加权和的“隐藏层”。

此模型仍是线性的。当你将输出表示为输入的函数并进行简化时,只是获得输入的另一个加权和而已。该加权和无法对图10-2中的非线性问题进行有效建模。因为即便我们添加任意多的分层,所有线性函数的组合依然是线性函数。因此,我们要从其他方面着手。所谓的从其他方面着手,也就是说,我们需要添加非线性函数。

10.1.2 激活函数

要对非线性问题进行建模,我们可以直接引入非线性函数。这种非线性函数可位于任何小的隐藏式节点的输出中。我们可以用非线性函数将每个隐藏层节点像管道一样连接起来。在图10-6所示的模型中,在“隐藏层1”中的各个节点的值传递到下一层进行加权求和之前,我们采用一个非线性函数对其进行了转换。这种非线性函数称为激活函数。

第10章 神经网络

309

PDF 物理页索引 326

文件中的第 327 页 · 印刷页码:310

通过在非线性上堆叠非线性,我们能够对输入和预测输出之间极其复杂的关系进行建模。下面我们来看一些常见的激活函数。S型激活函数将“加权和”转换为介于0和1之间的值。

$$
F ( x ) = { \frac { 1 } { 1 + e ^ { - x } } }
$$

曲线图如图10-7所示。

10.1.3 ReLU

相较于S型函数等平滑函数,以下修正线性单元激活函数(ReLU)的效果通常要好一点,同时还非常易于计算。

$$
F ( x ) = m a x ( 0 , x )
$$

ReLU是一种常用的非线性激活函数。如图10-8所示,它会接受线性函数,并在零值处将其截断。若返回值在零值以上,则为线性函数。若函数返回值小于零,则输出为零。这是一

人工智能与大数据技术导论

310

PDF 物理页索引 327

文件中的第 328 页 · 印刷页码:311

种最简单的非线性函数,我们可以使用该函数来创建非线性模型。ReLU的优势在于操作起来非常简单,拥有更实用的响应范围。

ReLU

实际上,所有数学函数均可作为激活函数。假设 $\sigma$ 表示激活函数(ReLU、S型函数等),网络中节点的值由以下公式指定:

$$
\sigma ( { \boldsymbol { w } } \cdot { \boldsymbol { x } } + { \boldsymbol { b } } )
$$

TensorFlow为各种激活函数提供“开箱即用型”支持。但是,我们仍然建议从ReLU着手。然后,可以将这些层级堆叠起来,并创建任意复杂程度的神经网络。总之,我们的模型拥有了人们通常所说的“神经网络”所有标准组件:

●一组节点,类似于神经元,位于层中。

●一组权重,表示每个神经网络层与其下方的层之间的关系。下方的层可能是另一个神经网络层,也可能是其他类型的层。

●一组偏差,每个节点一个偏差。

●一个激活函数,对层中每个节点的输出进行转换。不同的层可能拥有不同的激活函数。

还需要注意的是,神经网络不一定始终比特征组合好,但它确实适用于特征组合很难处理的场景。

10.1.4 实例代码

下面我们用TensorFlow的DNNRegressor类来定义一个神经网络(Neural Network,NN)和它的隐藏层。然后训练一个神经网络来学习数据集中的非线性,并展示神经网络比一个线性回归模型能获得更好的性能。我们先装载数据:

第10章 神经网络

311

PDF 物理页索引 328

文件中的第 329 页 · 印刷页码:312

人工智能与大数据技术导论

然后预处理数据:

312

PDF 物理页索引 329

文件中的第 330 页 · 印刷页码:313

创建训练集和验证集:

结果如图10-9\~图10-12所示。

313