1. 神经元与大脑

【1】神经网络,有时也称为人工神经网络,已经变得与我们所认为的大脑实际工作和学习方式大不相同

说明神经网络的工作原理,从一个例子开始

神经网络的大致工作:输入层有一个特征向量【这个例子中有四个数字】,他被输入到隐藏层【隐藏层输出三个数字】,再用一个变量来表示隐藏层输出的激活向量,然后输出层将这三个数字作为输入,并输出一个数字,这将是神经网络的最终激活值或最终预测。

尽管之前将这个神经网络描述为一个计算本例子的可负担性、意识、感知质量,但神经网路的一个很好的特性是,当你从数据中训练它,你不需要明确决定什么是特征,如可负担性等,神经网络应该计算,相反,它会自己找出在隐藏层中要使用的特征。

神经元的显著特点是,它能够自行学习隐藏层的特征检测器,神经网络能够从数据中自行找出这些数据。

有更多隐藏层的神经网络的例子;当你构建自己的神经网络时,你需要决定的一件事是你想要多少个隐藏层,以及每个隐藏层有多少个神经元。

关于有多少个隐藏层,以及每个隐藏层有多少个神经元的问题神经网络架构的问题 netural network architecture

有时文献中会将这种具有多层的神经网络称为多层感知器multilayer perception

以上是神经网络如何在需求预测示例,我们看看将类似的想法应用于计算机视觉应用

人脸识别的例子

在这个可视化中,第一个隐藏层的神经元被显示为查看相对较小的窗口以寻找这些边缘;然后第二个隐藏层查看更大的窗口,第三个隐藏层查看更大的。

因此这些小神经元的可视化实际上对应于图像中不同大小的区域

因此,只要输入不同的数据,神经网络就会自动学习检测非常不同的特征,以便尝试进行汽车检测、任人物识别或任何特定的训练任务。

以上是对神经网络的直觉描述以及其工作原理

2.神经网络层

2.1 简单的神经网络层的工作原理

接下来学习如何构建一层神经元,一旦掌握,就可以将这些构建块组合起来,形成一个大型的神经网络。

这个是神经元的工作原理:每输入一个数字向量并应用一堆逻辑回归单元,然后计算另一个数字向量,这个向量然后从一层传递到另一层,直到你得到最终输出层的计算,这是一个神经网络的预测,你可以选择在0.5处阈值或不阈值以得出最终预测。

2.2 更复杂的神经网络层的工作原理

所以现在就知道如何根据前一层的激活计算任何层的激活

2.3 推理:预测与前向传播

现在将所学的内容结合起来,形成一个算法,让您的神经网络进行推理或预测。这将是一个称为前向传播的算法。

使用f(x)来表示神经网络作为x的函数计算,因为这种计算是从左到右进行的,从x开始,然后计算a1,然后计算a2,...这个算法也成为前向传播,因为正在传播神经元的 激活,所以要向前方向从左到右进行这些计算。

这与另一种称为反向传播形成对比。

2.4 代码中的推理

TensorFlow是深度学习算法的主要框架之一,另一个流行的工具是Py Torch

神经网络的一个显著特点是,相同的算法可以应用于如此多的不同应用。

为了了解神经网络的作用,将用另一个例子来说明推理

这两个例子都是在TensorFlow中进行推理的语法,TensorFlow以某种方式处理数据,

2.5 TensorFlow中的数据

2.5.1 TensorFlow中,

惯例是使用矩阵来表示数据,它被设计用来处理非常大的数据集,通过矩阵而不是一维数组来表示数据,可以让它在内部计算更高效

2.5.2 如何在TensorFlow中构建神经网络

【1】第一种实现前向传播

TensorFlow中编码时,按照惯例,我们不会显式地将两层分配给两个变量,第一层和第二层,会像以下方式进行编写代码,这是一个顺序模型,由几个按顺序连接的层组成

第一个是一个具有三个单元和sigmoid激活函数的全连接层;

第二层是一个具有一个单元和再次使用sigmoid激活函数的全连接层

从头开始实现这些功能 

如何在一层中实现前向传播的,这个是复杂的表达式

Python中更通用的前向传播实现

你可以编写一个函数来实现神经网络中的一个全连接层

2.5.3 TensorFlow实现

继续用手写数字识别的运行实例

2.5.4 TensorFlow代码在训练神经网络细节

先回顾以下之前如何训练逻辑回归模型

每一步的详细描述

3. 通用人工智能AGI

【1】AI包含了两个不同的东西:

一个是狭义人工智能(ANI),这是一种只做一件事的人工智能系统,通常做的非常好;ANI是人工智能的一个子集,狭义人工智能的快速进步,也使人工智能取得巨大进步

另一个是通用人工智能AGI,这是构建能够做普通人能做的任何事情的人工智能系统的希望。

【2】随着现代深度学习的兴起,我们开始模拟神经元,并且随着越来越快的计算机,甚至是图形处理器(GPU),我们可以模拟更多的神经元

4.矩阵乘法

向量和向量的乘法

向量矩阵乘法

矩阵矩阵的乘法

矩阵与矩阵的一般乘法

矩阵乘法代码

我们看一下前向传播的向量化实现是什么样的

5.Sigmoid激活函数的替代方案

5.1 多种激活函数

当构建一个神经网络时,对于每个神经元,你想使用sigmoid激活函数还是ReLU激活函数或者线性激活函数;如何选择?

5.2 如何选择激活函数

我们将从如何为输出层选择激活函数的指导开始,事实证明目标标签或真实标签Y的不同,输出层的激活函数会有一个相当自然的选择;

然后看看如何为神经网络的隐藏层选择激活函数

这是为输出层选择激活函数;根据想要的结果进行选择

这是对于神经网络的隐藏层

总结

5.3 为什么选择激活函数

单单使用线性激活函数的弊端

例子

6 多类别

6.1 多分类概念

多类分类指的是分类问题,其中你可以有超过两个可能的输出标签,不仅仅是0/1

6.2 多输出分类

除了多分类,还有一种不同类型的分类问题,称为多标签分类问题,即与每个图像相关联的可以有多个标签,

如何构建一个用于多标签分类的神经网络呢,其中一个方法是将其视为三个完全独立的机器学习问题,你可以构建一个神经网络来决定是否有任何车,第二个神经网络来检测公交车,第三个神经网络来检测行人,这实际上不是一个不合理的方法。

7.softmax回归算法

7.1定义

softmax回归算法是逻辑回归的泛化,逻辑回归是一种二分类算法,适用于多分类场景

这是模型的形式,以及softmax回归的代价函数,如果你要训练这个模型,你可以开始建构多分类算法

7.2 带有Softmax输出的神经网络

我们将softmax回归模型放入神经网络的输出层

7.3softmax的改进实现

以上是

1.如何使用softmax输出层进行多类分类

2.如何以数值稳定的方式进行多类分类,

8. 高级优化

一种比梯度下降更高效的算法

Adam算法比梯度下降快得多,并且已经成为从业者训练神经网络的实际标准。

9. 额外的层类型

目前我们使用的所有神经网络层都是全连接层,其中每一层的每个神经元都从前一层的所有激活中获取,事实证明,仅使用全连接层类型,你就可以构建一些非常强大的算法。

下面更详细地说明一个卷积层

10.可选部分

10.1 什么是导数

在TensorFlow中,可以指定一个神经网络架构,计算输出y作为输入x的函数,并指定一个代价函数,然后TensorFlow会自动使用反向传播来计算导数,并使用梯度下降或Adam来训练神经网络的参数。因此反向传播算法,它计算代价函数相对于参数的导数,是神经网络学习中的关键算法。

再看几个导数的例子

10.2 计算图

计算图是深度学习中的一个关键概念,也是像TendotFlow这样的编程框架自动计算神经网络导数的方法

以上时,计算图如何将计算神经网络A的输出以及代价函数j所需的所有步骤分解为计算图的不同节点,然后使用从左到右的计算进行正向传播以计算代价函数j,然后使用从右到左/反向传播计算来计算所有导数

10.3更大的神经网络

看一下计算图如何在一个更大的神经网络示例中工作

综上,希望你对TensorFlow这样的编程框架训练神经网络时,实际发生的事情以及如何使用计算图高效地为你计算导数有了直观的理解。

你能多块的让一个机器学习系统良好运行,很大程度上取决于你在机器学习项目过程中能否反复做出正确的决策。

11. 模型评估

决定下一步尝试做什么

本周将花很多时间讨论你可以使用的不同诊断方法,以指导你如何改进学习算法的性能,,但是首先,让我们看看如何评估你的学习算法的性能。

11.1 评估模型

如果有一个系统的方法来评估性能也将有助于更清晰地指出如何改进其性能的路径,所以让我们看看如何评估一个模型。

以学习预测房价作为大小的函数为例:

评估模型

在将机器学习应用于分类问题时,实际上还有另一种更常用的j测试和j训练的定义,即不使用逻辑损失来计算测试误差和训练误差,而是测量算法误差分类的测试集和测试集的比例。

因此,在测试集上,你可以让算法对每个测试样本做出1/0的预测

将数据集分成训练集和单独的测试集,提供了一种系统评估学习算法效果的方法,通过计算j测试和j训练,现在就可以测量算法在测试集和训练集上的表现。这个过程是你能够自动选择一个模型用于特定机器学习应用的第一步。

例如,如果你在尝试预测房价,你应该拟合一条直线到你的数据,还是拟合一个二次多项式、三次多项式或四次多项式;事实证明,通过进一步完善你在本视频中看到的概念,你将能够有一个算法帮助你自动做出这种类型的决策。

11.2 模型选择与训练、交叉验证、测试集

这个视频使您能够使用一种技术来自动选择适合您机器学习算法的好模型。

这就是模型选择,这实际上是一个非常泛化使用的程序,早期提到了运行诊断以决定如何改进学习算法的性能;既然你有了评估学习算法甚至自动选择模型的方法,让我们更深入的探讨一些诊断的例子。

11.3诊断偏差和方差

最强大的诊断方法之一是偏差与方差。

开发机器学习系统的典型工作流程是,你有一个想法,然后训练一个模型,几乎总是会发现它还没有达到你期望的效果。因此构建机器学习系统的关键在于如何决定下一步该做什么以提高性能,查看学习算法的偏差和方差可以很好的指导你下一步该尝试做什么。

现在展示Jtrain和Jcv如何随拟合多项式的次数变化

关键要点是高偏差意味着在训练集上表现不佳;高方差意味着在交叉验证集上的表现比训练集差的多。

11.4 正则化与偏差方差

首先我们看看正则化如何影响学习算法的偏差和方差;因为这将帮助你更好的理解何时应该使用正则化。

看看正则化参数lambda选择,如何影响偏差和方差,从而影响算法的性能;事实证明,这将有助于你在为算法选择一个好的正则化参数lambda值时提供帮助。

交叉验证为确定正则化参数提供了一种方法;但前提是:我们正在解决的问题是,如果你正在拟合一个四阶多项式,这就是模型,并且你正在使用正则化,你如何选择一个好的lambda值

为了进一步加深对算法作用的直觉,让我们看看训练误差和交叉误差如何随参数lambda变化

这就是正则化参数lambda如何影响算法的偏差和方差以及整体性能。

到目前为止,我们已经讨论了高训练集误差,高Jtrain,是高偏差的指示,以及高交叉验证误差JCV,特别是如果它远高于Jtrain,如何指示方差问题,

下个视频将会知道如何查看Jtrain和JCV并判断他们是高还是低,事实证明,这些想法的进一步细化,即通过学习算法建立性能基准水平,将使你更容易查看这些数字,Jtrain,JCV并判断他们是高还是低。

11.5 建立基准性能水平

让我们看一些具体的数字,了解Jtrain和JCV可能是什么,并看看如何判断一个算法是高偏差还是高方差,

以语音识别的例子贯穿

总结,我们已经看到,查看训练误差是否大是判断算法是否具有高偏差的一种方法,但是在某些应用中,数据有时只有噪声,并且期望达到0误差是不可行或不现实的,那么建立这个基准性能水平是有用的。

同样的查看交叉验证误差是否远大于训练误差,可以让你了解算法是否也可能存在高方差问题。

为了进一步磨练我们对学习算法表现的直觉,还有一件事很有用,那就是学习曲线。

11.6 学习曲线

学习曲线是一种帮助你理解你的学习算法在经验量增加时,表现方法,这里的经验指的是,例如,算法所拥有的训练样本数量。

高偏差曲线

高方差曲线

因此,如果你正在构建一个机器学习应用,你可以绘制学习曲线,也就是说,你可以使用训练集的不同子集训练一个模型,并查看训练误差和交叉验证误差,并绘制Jtrain和JCV以此类推,绘制出学习曲线的样子。如果你以这种方式可视化,那么这可能是另一种让你看到你的学习曲线更像高偏差还是高方差的方法。绘制曲线的一个缺点是,在计算上相当昂贵,需要训练许多使用不同大小子集模型。所以在实践中,不常用。

11.7方差、偏差与神经网络

更多推荐