机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结

目录

神经网络模型

神经网络层(Neural network layer)

更复杂的神经网络

 使用向前传播做预测(Inference_making predictions(forward propagation))

TensorFlow工具

 在TensorFlow中构建神经网络(Building a neural network)

单层中的向前传播(Forword prop in a single layer)

神经网络矢量化(Vectorization)

训练神经网络

激活函数 Activation Functions(sigmoid函数的替代方案)

sigmoid函数

 Tanh函数

 ReLU函数

如何选择激活函数 

多分类 Multiclass Classification

softmax回归算法

 softmax回归的代价函数

 softmax应用在神经网络

多标签分类问题(multi-lable classification)

Adam算法 进阶优化(Advanced Optimization)

 Additional Layer Tpyes 卷积层

诊断方法

模型评估(Evaluating a mould)

 模型选择&交叉验证(Model selection & tranining/cross validation)

 方差与偏差(Bias and variance)

正则化 and 偏差方差

为性能建立一个基线(Establishing a baseline level of performance)

学习曲线(Learing curves) 

遇到高偏差、高方差,解决方法

误差分析(Error analysis)

添加数据(Adding data)

迁移学习(Transfer leaning)

 如何处理偏态数据(skewed data)数据倾斜

权衡精确率和召回率

决策树

测量存度(Measuring purity)

选择拆分 信息增益

信息增益比

 独热编码(one-hot encoding)

连续值的特征(Continuous valued features)

 缺失值处理

 回归树(Regression Tress)

 集成学习:使用多个决策树 - 集成树(tree ensembles)

有放回抽样(sampling with replacement)

随机森林法则

增强决策树(boosted descion tree)

XGBoost 极端梯度增强(eXtreme Gradient Boosting)

决策树和神经网络

剪枝策略


需求预测(Demand Prediction)

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第1张图片

左边三个神经元称为一层,一层也可以像右边只有一个神经元。

将负担性、知名度、感知质量等特征称为激活项 

它有多层,每层输入一个向量,输出另一个向量。输入层-隐藏层-输出层

神经网络一个很好的特点是:当你从数据中训练它时,你不需要明确第决定其他什么特征,比如知名度等等,神经网络可以自己计算出它想要在这个隐藏层中使用的特征。

神经网络模型

神经网络层(Neural network layer)

隐藏层中是如何计算的

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第2张图片

用上标【i】来表示神经网络的第几层 ;

用a来表示逻辑回归算法的输出

g()还有一个名字叫做激活函数,输出的向量叫激活值,上式为sigmoid函数,也叫logistic函数

在正向传播的过程中 w,b是已知的。

更复杂的神经网络

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第3张图片

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第4张图片

 使用向前传播做预测(Inference_making predictions(forward propagation))

向前传播算法:如上图x->a1->a2->a3,从左到右前进的方向进行计算(当你靠近输出层时,隐藏单元的数量就会减少)

神经网络的一个显著特点是:同一个算法模型可以有不同的应用场景

TensorFlow工具

TensorFlow是实现深度学习算法的主流框架之一

基于TensorFlow实现推理模型的语法:

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第5张图片

 TensorFlow是如何表示数据的

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第6张图片

 在TensorFlow中构建神经网络(Building a neural network)

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第7张图片

Sequential,TensorFlow中的顺序函数,另一种方式:在学习的同时也向前传播;将刚刚创建的两层按顺序连接起来

单层中的向前传播(Forword prop in a single layer)

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第8张图片

通用人工智能 AGI(artificial general intelligence)

神经网络矢量化(Vectorization)

matmul 是 NumPy执行矩阵乘法的方法

向量化代码:

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第9张图片

训练神经网络

TensorFlow实现(TensorFlow implementation) 

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第10张图片

1.制定模型,告诉TensorFlow如何计算推断

2.编译模型,使用特定的损失函数

3.训练模型

epoch,术语:指你想学习算法进行梯度下降的步数

激活函数 Activation Functions(sigmoid函数的替代方案)

       只有激活函数才能给神经元引入非线性因素,使得神经网络逼近非线性函数,当网络足够复杂的时候就可以逼近任意函数

        之前讨论的激活函数为g(z)sigmoid函数,还有其他的激活函数:ReLU(Rectified Linear Unit)修正线性单元、线性激活函数、softmax激活函数

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第11张图片

sigmoid函数

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第12张图片

 Tanh函数

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第13张图片

 ReLU函数

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第14张图片

如何选择激活函数 

        取决于目标。如果是研究二元分类问题:在输出层使用sigmoid;房价,不能为负值:ReLU

y值是一个数,并且可正可负:线性函数

相比sigmoid,ReLU计算速度更快、学习的更快

多分类 Multiclass Classification

多分类是指可以有不只两个可能输出标签的分类问题

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第15张图片

softmax回归算法

        是逻辑回归算法的泛化,是一种针对多分类环境的二元分类算法

w1-4 , b1-4 是softmax函数的参数;aj被解释为,在给定输入特征x的情况下,y=j的概率估计

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第16张图片

 softmax回归的代价函数

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第17张图片

 softmax应用在神经网络

        注意,a1是包含z1~10的函数,所以每一个激活值,都取决于z的值。这是softmax输出独有的一个属性。

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第18张图片

 如何在tensorflow中实现

        并且减少计算过程中数值舍入误差

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第19张图片

代码部分

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第20张图片

多标签分类问题(multi-lable classification)

        每张图片都有很多的、与之相关的标签。(输出不再是一个数字,而是多个数字代表不同标签,例如自动驾驶视觉)。需要训练单一的神经网络,来同时检测多种物体

Adam算法 进阶优化(Advanced Optimization)

        和梯度下降一样,是优化算法,用来最小化代价函数

        Adam(Adaptive Moment estimation):可以自动调整学习率,模型的每个参数都会有不同的学习率,沿相同方向移动,提高学习率(步子迈得更大)。

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第21张图片

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第22张图片

 Additional Layer Tpyes 卷积层

        全连接层(dense layer)类型:其中每一层的神经元都从前一层得到所有的激活。

        卷积层(convolutional layer):这种层的每个神经元只关注输入图像的一个区域,需要训练的数据更少,也更不容易过拟合

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第23张图片

当w增加一个小的值Epsilon时,J(w)的值会改变:J(w)对w的倒数 × Epsilon。

诊断方法

模型评估(Evaluating a mould)

        70%的数据放入训练集,30%的数据放入测试集。利用训练集上的数据去训练模型的参数,然后在测试集上测试模型的表现。

        使用测试集去评估模型的性能(不包括正则化的一项)

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第24张图片

 机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第25张图片

 模型选择&交叉验证(Model selection & tranining/cross validation)

        为机器学习算法自动选择一个好的模型

将数据分为三部分:训练集,交叉验证集(cross-validation set),测试集.

计算出:训练误差、交叉验证误差、测试误差

        观察哪个模型的交叉检验误差最低,选出模型,最后为了表现泛化误差估计的这个模型在新数据上表现有多好,使用测试集求出J(w4,b4)测试误差.(这样测试集就变得很公平,而不是对泛化误差的过度乐观估计)

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第26张图片

  • 训练误差是在训练集上计算的错误率,反映了模型在训练数据上的表现。
  • 交叉验证误差(本身包含训练集和验证集)是通过交叉验证方法,在验证集上计算的平均错误率,更能够评估模型的泛化性能。

在交叉验证中,Fold 1 和 Fold 2 表示数据集被分成的两个不重叠的子集,它们在不同的交叉验证迭代中用作训练集和验证集。

具体来说,假设我们使用 2 折交叉验证,将数据集按照 6:2 的比例划分为两个子集。交叉验证的过程如下:

  • Fold 1:

    • 训练集:前 6 条数据
    • 验证集:后 2 条数据
  • Fold 2:

    • 训练集:后 6 条数据
    • 验证集:前 2 条数据

在每个 Fold 中,我们将训练集用于模型的训练,然后使用验证集来评估模型的性能。每次交叉验证迭代时,交替选择不同的 Fold 作为验证集,直到所有 Fold 都被用作验证集为止。最后,我们将所有交叉验证迭代的结果平均,得到交叉验证误差。

  • 测试误差是在独立的测试集上计算的错误率,用于评估模型在未见过的数据上的表现。

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第27张图片

 方差与偏差(Bias and variance)

诊断方差偏差

        当你有多特征的时候,你就没法用画图的方式直观判断出它是否表现的那么好。所以,一个更系统的判断算法是否有高偏差或高方差的方法是,看你的算法在训练集和交叉检验集上的表现。

高偏差算法的一个特点是:欠拟合

高方差算法的一个特点是:J_cv比j_train高得多

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第28张图片

高偏差意味着 算法在训练集上表现不好

高方差意味着 算法在交叉验证集的表现 比训练集上差得多

正则化 and 偏差方差

正则化参数的选择是如何影响算法的偏差和方差

\lambda非常大时,模型有高偏差(欠拟合);\lambda非常小时,高方差(过拟合)

L2正则化

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第29张图片

使用正则化,如何选择合适的\lambda: 交叉验证

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第30张图片

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第31张图片

为性能建立一个基线(Establishing a baseline level of performance)

        为性能建立一个基线(baseline),我们就更容易判断j_train,j_cv的值,是高还是低。

第一组数据:高方差;第二组数据高偏差

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第32张图片

学习曲线(Learing curves) 

        学习曲线是一种帮助你了解学习算法性能如何的方式,曲线随着经验的数量发生变化

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第33张图片

        交叉验证误差,通常比训练误差高,因为你调整参数去拟合训练集,是希望训练集上的性能得到提升,或者当m很小时,训练集上的表现,至少比交叉验证集好。

        训练误差是模型在训练数据上的性能,而交叉验证误差是模型在未见过的测试数据上的性能。通常情况下,交叉验证误差会比训练误差高,这是因为模型在训练数据上可能过度拟合,导致在未见过的数据上表现不佳。

高偏差 vs 高方差的学习曲线

学习算法有高偏差:获取更多的训练数据本身不会有太大帮助

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第34张图片

 学习算法有高方差:可以通过扩大训练集来降低交叉验证误差,从而让算法表现更好

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第35张图片

遇到高偏差、高方差,解决方法

我们该怎么做

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第36张图片

算法方差很大解决方法:获取更多的训练数据,或 简化模型(用更小的特征集 或 增大正则化参数)

算法偏差很大 解决方法:使模型更强大,或给予他更大的灵活性,以拟合更复杂的函数(添加特征 或 添加多项式特征 或 减少正则化参数)

误差分析(Error analysis)

误差分析过程是指人工检查错误的样本,并试图找出算法出错的地方

添加数据(Adding data)

为机器学习应用添加数据或收集更多的数据

更强的指向性,添加那些出过错的例子,模型会学习的更好

数据增强:用一个已有的训练例子来创建一个新的训练例子(旋转、放大、缩小已有的例子)

迁移学习(Transfer leaning)

        可以使用来自不同任务的数据帮助你结局当前的任务,使用其他训练好的神经网络的前几层(包括参数)。

首先在大型数据集上进行训练(监督预训练),然后在较小的数据集上进行进一步参数调优(微调)

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第37张图片

 如何处理偏态数据(skewed data)数据倾斜

        正负样本的比例十分倾斜,远不是五五开,我们就无法通过准确率来判断算法是否好坏(一直输出y=0的例子,反而准确率高)。

        所以,评估一个罕见类的学习算法的性能,一个有用的算法是构造一个混淆矩阵

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第38张图片

计算 精确度 和 召回

精确度:真阳性 在 阳性 中的比例 (找的对)

召回:真阳性 在 实际阳性 中的比例 (所有患病人中 正确检测到的比例)(找的全)

权衡精确率和召回率

提高阈值--会导致更高的精度、更低的召回,反之亦然。

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第39张图片

还有另一个指标,叫 F1 score,它可以自动结合精度和召回率,帮你选择最佳权衡值

此方程也被称为P 和 R 的 调和均值(是一种取平均值的方式,但是更强调较小的值)

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第40张图片

决策树

决策树模型

输入值,同样也是二元的,具有分类价值  Categorical(discrete values)

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第41张图片

学习过程(Learning Process)

如何让算法学习基于训练集的的特定决策树?

构建树的过程:人为划分

如何选取特征:看哪些特征能使左右分支标签的纯度最大(分完后没有异类)

什么时候停止划分:百分百确定是一个类的时候;或达到设定的最大深度时(保持树更小,防止过拟合);或 纯度提高,低于某个阈值时

测量存度(Measuring purity)

在熵(entropy)的定义下(衡量纯度的一种方式),如何决定分割一个节点

用熵函数(H(p_1))测量组样本的不纯度:五五开的时候熵值最高

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第42张图片

定义p0=不是猫的比例,熵函数定义为:

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第43张图片

选择拆分 信息增益

        决定用什么特征来划分一个节点,取决于 什么样的特征选择最能减少熵。

        熵的减少称为信息增益 

        把左右分支的熵,做加权平均和(左右分支 被分到的数量也同样重要,因为如果分到的数量更多,那这边的熵值更低 就更重要),选择根节点,计算根节点的熵(H(0.5)).,选择最大的那一个。

整个式子衡量的是:树在分裂过程中熵的减少(把能最大程度降低熵的特征作为节点)

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第44张图片

信息增益比

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第45张图片

 独热编码(one-hot encoding)

        使用one-hot编码来解决:特征取两个以上的离散值 的问题。通过创建k个只能取值为0或1的二进制特征来替换。

连续值的特征(Continuous valued features)

如果特征不只是离散值,而是连续值呢?

当使用划分时,你只需要考虑不同的值来划分,执行通常的信息增益计算,选择高的并决定对其进行分割

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第46张图片

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第47张图片

 缺失值处理

 回归树(Regression Tress)

        可以用来预测一个数字

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第48张图片

如何选择哪个特征:首先做的是,尽量减少这些数据子集中体重的 方差(衡量一组样本的离散程度,方差越大 数据点越分散)。

 与熵类似,对于回归树,我们同样测量方差的减少。选大的,降低的越多越好

 集成学习:使用多个决策树 - 集成树(tree ensembles)

        使用单一决策树的缺点:它可能对数据中的微小变化高度敏感(比如仅改变单个训练样本,具有最高信息增益的结点就可能发生改变,进而产生完全不同的树,说明这个算法不是那么健壮)

        在新样本上运行这三个树,并让它们投票做出最终预测

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第49张图片

 这样我们就不用担心整体算法会对任何一棵树的预测过于敏感

有放回抽样(sampling with replacement)

将有放回抽样应用于构建集成树的方式如下:

创建新训练集

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第50张图片

随机森林法则

        在根节点或根节点附近的几个节点 会有相同的特征选择,所以,进一步尝试 随机每个节点的特征选择,会导致树之间变得更加不同,预测会更加准确。

        选择k个小于n个特征的 随机子集,只允许算法从这k个特征子集中挑选 信息增益最大的特征来划分。当n很大是,k的典型选择是\sqrt{}n,最终得到的就是随机森林

增强决策树(boosted descion tree)

        对于我们已经训练过的决策树,专注于我们还没做好的地方,然后在构建下一个决策树时,我们会把更多的注意力集中在做的不好的例子上。

例:第二次循环:用有放回的方式生成另一个含有10个示例的训练集。增强的步骤会在每一次迭代过程中做B次,就会有更高的概率选择这样的例子(以前样本树集合做的不太好的例子)

机器学习-(第二部分:神经网络/深度学习)-吴恩达-学习总结_第51张图片

XGBoost 极端梯度增强(eXtreme Gradient Boosting)

不要用有放回的XGBoost,,它实际上不需要产生很多随机选择的训练集,甚至比使用有放回采样更有效。

决策树神经网络

决策树和集成树通常可以很好的处理表格数据(结构化数据)。对于决策树一次只能训练一颗

神经网络适用于所有类型的数据,包括结构化和非结构化、以及混合数据。神经网络可能比决策树慢,但它可以和迁移学习一起使用

剪枝策略

剪枝原因:提高泛化能力

        剪枝(Pruning)是一种用于降低决策树复杂性的策略,目的是防止过拟合,提高模型的泛化能力。决策树在构建过程中可能会生成过于复杂的树结构,这可能导致模型在训练数据上表现得很好,但在新数据上表现较差。剪枝策略的目标是削减决策树中的一些子树,从而降低模型的复杂性,使其更具泛化能力。

预剪枝

         在决策树构建的过程中,预剪枝是在每次节点分裂前进行的。在分裂节点之前,会根据一些预定义的条件来判断是否应该继续分裂。一些常见的预剪枝条件包括:

  • 最大深度:限制树的最大深度。
  • 最小样本数:限制每个叶节点的最小样本数。
  • 最小信息增益:仅在信息增益超过某个阈值时才进行分裂。

后剪枝

        后剪枝是在决策树构建完成后,通过修剪一些子树来减小模型的复杂性。后剪枝的过程通常涉及到递归地检查子树,然后判断是否应该将子树替换为叶节点。常见的后剪枝策略包括:

  • 验证集剪枝:将数据集划分为训练集和验证集,在验证集上评估剪枝后的模型性能,根据性能来决定是否剪枝。
  • 决策树复杂度度量:通过度量子树的复杂度(比如叶节点数)来选择哪些子树需要剪枝。

你可能感兴趣的:(机器学习,深度学习,神经网络)