首页 > 其他分享 >吴恩达机器学习第二课 Advanced Learning Algorithms

吴恩达机器学习第二课 Advanced Learning Algorithms

时间:2024-06-10 11:33:56浏览次数:20  
标签:吴恩达 第二课 训练 算法 神经网络 Algorithms np 节点 决策树

Advanced Learning Algorithms

week1

1.1 神经元和大脑

image-20240525202721224

image-20240525203041902

image-20240525203628262

1.2 需求预测

image-20240525204801716

构建自己神经网络的时候:需要决定隐藏层的个数和每个隐藏层的神经元个数

image-20240602115622410

1.3 图像感知

像素的亮度值从0~255变化

人脸识别:训练一个神经网络,以一个特征向量作为输入,输出图片中人的身份

image-20240602120040307

image-20240602120812637

2.1 神经网络中的网络层

如何构建神经元层

image-20240602121815342

image-20240602122254611

image-20240602122503260

2.2 更复杂的神经网络

image-20240602123437830

image-20240602123631532

image-20240602123844290

2.3 神经网络前向传播

举例:手写数字识别

只区分手写数字0和1,二进制分类问题

8*8矩阵,255表示明亮的白色像素,0表示黑色像素

64个输入特征,使用两个隐藏层的神经网络

第一个隐藏层有25个神经元

第二个隐藏层有15个神经元

输出层是数字1的概率

第一次计算:\(\vec{x}\)(\(\vec{a}^{[0]}\))到\(\vec{a}^{[1]}\)

第二次计算:\(\vec{a}^{[1]}\)到\(\vec{a}^{[2]}\),这里\(\vec{a}^{[2]}\)是\(\vec{a}^{[1]}\)​的一个函数

...

image-20240602132400413

3.1 使用代码实现推理 tensorflow

image-20240602132643545

image-20240602132845233

特征向量x:温度和持续时间

输出:是否是好咖啡

image-20240602133556263

image-20240602133706716

image-20240602134743630

3.2 tensorflow的数据形式

在处理线性回归和逻辑回归的课程里,我们使用一维向量来表示输入特征x,对于tensorflow使用矩阵来表示数据

tensorflow处理数据集较大,使用矩阵可以让计算效率高一些

image-20240602145645367

tensor是tensorflow团队为了更加有效的存储和执行矩阵计算创建的一种数据类型

从技术上来说,tensor比矩阵更通用,但是本课程会将tensor视为矩阵的一种表示方式

  • 表示矩阵的tensorflow形式
  • 表示矩阵的numpy形式

image-20240602150104150

[!TIP]

如果想要获取张量a1并将其转换回numpy数组可以使用函数a1.numpy来实现

3.3 搭建一个神经网络

image-20240602152631508

这里并没有对第一层和第二层的变量进行显式分配,通过sequential函数中。

image-20240602152707178

下载tensorflow慢的话使用:

pip install --no-cache-dir tensorflow -i  https://pypi.mirrors.ustc.edu.cn/simple/

4.1 单个神经网络上的前向传播

image-20240602155014674

4.2 前向传播的一般实现

编写一个函数来实现dense layer,即神经网络的单层

将前一层激活和给定层的神经元的参数w和b作为输入

image-20240604121421129

W = np.array([
    [1,-3,5],
    [2,4,-6]
]) #w1是第一列,w2是第二列
b = np.array([-1,1,2])
a_in = np.array([-2,4])
def g(z):
    return 1.0/(1.0+np.exp(-z))
def dense(a_in, W, b, g):
    # 将前一个层的activation和给定神经元中的参数w和b作为输入
    #给出本层的activation
    units = W.shape[1] #有多少列 w.shape:(2,3) 有多少列就是有多少个单元
    a_out = np.zeros(units) # [0,0,0]
    for j in range(units):
        w = W[:j] #依次把每一列取出来 0 :[1 2]   1 :[-3  4]  2 :[ 5 -6]
        z = np.dot(w,a_in)+b[j]
        a_out[j] = g(z)
    return a_out
def sequential(x):
    a1 = dense(x,W1,b1)
    a2 = dense(a1,W2,b2)
    a3 = dense(a2,W3,b3)
    a4 = dense(a2,W4,b4)
    f_x = a4
    return f_x

5.1 强人工智能

image-20240604121720609

image-20240604121933931

6.1 神经网络

np.dot:这个函数既可以用于计算两个数组的点积(内积),也可以用于执行矩阵乘法。

np.matmul:此函数主要用于矩阵乘法。它要求参与计算的数组满足矩阵乘法的规则,即第一个数组的列数必须等于第二个数组的行数

def dense2(a_in, W, b):
    z = np.matmul(a_in,W)+b #主要用于矩阵乘法
    a_out = g(z)
    return a_out

6.2 矩阵乘法及其实现

image-20240604124340736

使用 vectorization

a = np.array([1,2]) #生成数组 (2,)
b = np.array([3,4])
z = np.dot(a,b) # 1*3+2*4
z # 11
a = np.array([1,2]).reshape(1,-1)
b = np.array([3,4])
z = np.dot(a,b)
z # array([11])

image-20240604125549527

image-20240604125948321

image-20240604131242186

A = np.array([[1,-1,0.1],[2,-2,0.2]])
AT = A.T
W = np.array([[3,5,7,9],[4,6,8,0]])
Z = np.matmul(AT,W)
#Z = AT @ W
Z

image-20240604131448183

week2

1.1 Tensorflow实现

image-20240605181502062

1.2 模型训练细节

image-20240605182028280

image-20240605182150587

image-20240605182709966

image-20240605183035010

2.1 Sigmoid 激活函数的替代方式

image-20240605183531303

image-20240605183704293

2.2 如何选择激活函数

image-20240605184743749

image-20240605184824622

image-20240605185258523

image-20240605185411870

2.3 为什么模型需要激活函数

image-20240605185719561

image-20240605185826538

image-20240605190157001

image-20240605190338408

3.1 多分类问题

image-20240605191020332

3.2 softmax

image-20240605191753034

image-20240605192214334

3.3 神经网络的Softmax输出

image-20240605192758982

3.4 Softmax的改进实现

image-20240605193403386

image-20240606093417704

image-20240606165959950

3.5 多个输出的分类

image-20240606182210406

image-20240606182635830

4.1 高级优化方法

image-20240606183644137

image-20240606183747922

image-20240606183851363

image-20240606184123780

4.2 其他的网络层类型

image-20240606184424546

image-20240606185530275

image-20240606185930073

5.1 什么是导数(选修)

image-20240606190710365

image-20240606190929798

image-20240606191621816

image-20240606194130180

image-20240606194041810

image-20240606194714950

image-20240606194851612

5.2 计算图

image-20240606195440562

image-20240606200148408

image-20240606200253601

image-20240606200504260

5.3 大型神经网络案例

image-20240606201317305

week3

1.1 决定下一步做什么

image-20240607202734647

1.2 模型评估

image-20240607203118238

image-20240607203332670

image-20240607203738132

image-20240607203905206

1.3 模型选择和交叉验证测试集的训练方法

image-20240607204250930

image-20240607204451153

image-20240607204843495

image-20240607204957770

image-20240607205025216

因为选择d的过程是依赖于测试集数据的,这个d值可能恰好只是对于测试集来说的最优,但如果再用这个模型在测试集上评估性能,就不准确了

用验证集确定最优权重和阈值,用测试集确定最优模型类型

也就是,在训练集训练出d1到d10,十个模型;在交叉验证集上根据j值选择最小的那个模型;然后再测试集考察他的泛化能力;

测试集用过之后你不能去改模型,测试集本来就是评估模型的泛化能力的

训练集用于模型的学习和参数 w j调整;交叉验证集用于模型选择,例如调整超参数,(如决策树的树深)选择最佳模型;测试集用于最终评估模型性能

image-20240608104820101

2.1 通过偏差和方法进行判断

image-20240608105616283

J_train不高说明没有高偏差问题,J_cv不比J_train差,说明没有高方差问题。

image-20240608110204403

2.2 正则化、偏差、方差

image-20240608112605152

如何选择λ

最小化成本函数得到w1 b1,然后可以计算交叉验证误差

image-20240608113141305

image-20240608114611693

2.3 制定一个用于性能评估的基准

image-20240608115322758

image-20240608115503826

image-20240608115927327

2.4 学习曲线

image-20240608121219024

高偏差是欠拟合,模型能力不够,所以增加再多数据也没有用

高方差理解为过拟合,也就是模型能力强,数据少 所以增加数据量有用

简单来说就是增加training样本量可以减少variance,但对减少bias没作用

2.5下一步

high bias:获取尽量多的特征,添加尽量多的多项式特征,降低λ

high variance:获得尽量多的训练数据、尽量少的特征集合,提高λ

增加λ会迫使算法适应更加平滑的函数

2.6 方差和偏差

image-20240608143925058

image-20240608144359527

3.1 机器学习开发的迭代

image-20240608144859113

image-20240608145502424

image-20240608145635073

3.2 误差分析

image-20240608150558019

3.3 添加更多数据

image-20240608200258113

image-20240608200457597

image-20240608200720772

image-20240608200956930

image-20240608201223759

3.4 迁移学习-使用其他任务中的数据

image-20240608202709343

因为两个网络的本质都是图像分类,所以在隐藏层的大部分工作都是相似甚至一样的,所以直接把第一个网络的隐藏层拿过来用,对输出层重新训练就能实现新的功能。相当于螺丝刀的刀柄都是一样的,但把十字刀刀头换成一字刀作用就不一样了

如果训练集小,option1

如果训练集稍大,option2

图像处理的早期是有一些共性的,所以可以借用参数

image-20240608203138570

image-20240608203443364

3.5 机器学习项目的完整周期

image-20240608204243056

3.6 公平 偏见与伦理

image-20240609100231856

4.1倾斜数据集的误差指标

image-20240609100818898

image-20240609101653999

准确率(Precision

精确率:在预测结果中有多少是正类

通过误差率可能并不能选择出最好的算法,因为这个误差小的可能不是特别有用的预测。

在这种量(比如某种疾病的患病率1%)比较少的数据集上,我们不仅用err rate来判断这个算法的表现如何

召回率 Recall

召回率:在所有正类中有多少是没被遗漏的

召回率可以帮助检测学习算法是否始终预测为0,如果你的算法只打印y=0,那么true positive将永远为0,因为永远不会预测positive

precision 一个预测pos里真的pos占比

recall 一个真的pos里预测pos占比

image-20240609102033050

如果一直预测为0,没有true positive ,那么两者的分子都将为0

如果一个算法为0 precision或者0 recall都不是一个有用的算法,如果一个算法总是预测为0,那么他的precision 是undefined,因为是0/0

4.2 精确率和召回率的权衡

在理想情况下我们喜欢具有高精度和高召回率的算法,但在实际上,我们需要权衡准确率和召回率

高threshold :高准确率, 低召回率

低threshold:低准确率,高召回率

绘制不同阈值的精确率和召回率,可以让我们选择所需要的点

image-20240609103837994

如果想自动权衡精确度和召回率,使用F1 score

将召回率和准确度合并为一个分数,F1只需查看哪个分数最高

image-20240609104807778

F1 score是一种强调 precision and recall中比较低的值,因为事实证明,如果算法的精度和召回率非常低,说明二者没有那么有用。F1 score是一种计算平均分数的方法,更加关注较低的分数

F1 score是一种均值,调和均值是一种更强调较小值的平均值

week 4

1.1 决策树模型

image-20240609141206443

image-20240609141538939

image-20240609141635973

1.2 学习过程

image-20240609142309090

floppy 下垂的耳朵

pointy 尖耳朵

构建决策树的第一个关键点:选择哪一个特征来划分每个节点

image-20240609142554123

构建决策树的第二个关键点:什么时候停止划分

  • 当节点获得了100%的分类结果(When a node is 100% one class);
  • 当划分节点会导致超过树的最大深度(When splitting a node will result in the tree exceeding a maximum depth);
  • 当纯度值的增长低于一定阈值(When improvements in purity score are below a threshold);
  • 当节点中案例数量低于一定阈值(When number of examples in a node is below a threshold)。

2.1 纯度

熵:衡量一组数据不纯程度的指标(Entropy as a measure of impurity)

image-20240609144055534

如图,p1指代一组分类结果中猫的占比(剩下的是狗);H(p1)是熵;图中为熵与p1的关系;可见熵随着纯度的增大呈现先增大后减小的趋势;在p1=0.5时(如,3个猫3个狗)熵达到最大值1,在p1分别为0(6个狗)和1(6个猫)两个端点时,熵最小,值为0。
图中熵函数的公式:

image-20240609145324463

首先定义集合中除了猫之外的小动物占比:

\[p_{0} = 1 - p_{1} \]

熵函数:

\[H(p_{1}) = -p_{1}log_{2}(p1)-p_{0}log_{2}(p_{0}) \]

也可以记为:

\[H(p_{1}) = -p_{1}log_{2}(p_{1})-(1-p_{1})log_{2}(1-p_{1}) \]

  1. 为了计算,这里设定:

    \[0log_{2}(0) = 0 \]

  2. 选用2为底数而非e或者10,是为了让极大值为1,换成其它底数相当于现有函数图像上下等比例伸缩。

  3. Gini函数也可以用作熵函数,但本课简单起见使用这里介绍的entropy criteria函数

2.2 选择拆分信息增益

信息增益(information gain):衡量从上一节点分裂出两个节点后,这种分裂方法对应的熵的减少量(the reduction in entropy that you get in your tree resulting from making a split)。

image-20240609145748579

如果一个节点中有比较多的实例并且具有高熵,这比有一个节点中只有几个实例具有高熵更加糟糕。因为熵作为杂质的度量,如果你有一个非常大而且不纯的数据集,那么比只有几个例子和不纯的树的一个分支相比,熵会更加糟糕

image-20240609150807195

在根节点的使用上,在这三种可能的特征选择上,我们需要使用哪一种?

使用加权平均,在左右两个子分支中,低熵还需要取决于这里左右节点的实例。我们这里计算的是熵的减少,而不知是左右子分支的熵。

熵最初在根节点处是 1,通过拆分得到比较低的熵值,这两个值之间的差异是熵的减少。决定何时不再进行分裂的停止标准之一是熵的减少是否太小。这里我们选择用ear shape作为根节点来划分,因为根节点这里的熵减少的最多。

image-20240609151609317

信息增益的计算公式:

\[Information = H(p_{1}^{root})-(w^{left}H(p_{1}^{left})+w^{right}H(p_{1}^{right})) \]

w_left 和 w_right:这两个分别是左子节点和右子节点的权重,通常等于它们各自包含的样本数量占总样本数量的比例。

2.3 整合

决策树的计算过程:

  • 从树的根节点的所有训练实例开始
  • 计算所有特征的信息增益,选择要拆分的特征,提供最高的信息增益
  • 根据所选择的特征将数据集拆分为两个子集,并创建树的左右分支,并将训练实例分到左右两侧
  • 重复划分直至达到了停止分裂的准则
    • When a node is 100% one class
    • When splitting a node will result in the tree exceeding a maximum depth
    • Information gain from additional splits is less than threshold
    • When number of examples in a node is below a threshold

image-20240609153244008

2.4 独热编码 One-hot

现在构建了三个新特征,而不是一个特征采用三个可能的值。这里每个特征智能采用两个可能值中的一个1或者0

image-20240609153931508

如果一个特征可以取k个可能的值,那么在我的例子中k是三个,那么我们将通过创建k个只能取值0或者1的二进制变量来取代他

在这三个特征中,一定有一个恰好为1,这就是为什么称为one-hot的原因。

采用one-hot编码,可以让决策树采用两个以上的离散值特征,也可以将其应用于新的网络或者线性回归或者逻辑回归训练。

2.5 连续有价值的功能

image-20240609180049266

当对权重特征进行约束拆分的时候,我们应该考虑这个阈值的不同的值,选择能够带来最好的信息增益的那个。

image-20240609180651650

2.6 回归树

image-20240609181014074

image-20240609181230989

这里的加权平均方差和我们决定使用什么分割时候用的加权平均熵,有着非常相似的作用

image-20240609181859253

选择最小的加权方差

3.1 使用多个决策树

使用单一决策树可能会对数据中的微小变化高度敏感。

image-20240610094336831仅改变一个训练实例就会导致算法的决策树不同

image-20240610094559484

3.2 有放回取样

image-20240610095323634

构建多个随机训练集,这些训练集都与我们原始的训练集略有不同

image-20240610095715869

意义就是 好几个 决策树使用的训练样本都不太一样 但是又都是属于原来的训练样本

3.3 随机森林

image-20240610100230360

image-20240610100659157

image-20240610100925976

where does a machine learning engineer go camping? In a random forest

3.4 XGBoost

决策树最常用的一种方式

抽样的时候不是从m个等概率样本中选择1/m的概率,而是让我们更有可能选择先前训练的树表现不佳的错误分类样本

image-20240610102713122

第四列是预测,根据分类是否正确进行打勾

第二次循环需要做的是,把这些错误的放到十个实例中,当每次选择的时候,都有更高的机会从这三个仍然错误的分类实例中选择一个。

今天使用最广泛的一种实现Boost的就是XGBoost

  • 开源
  • 高效
  • 很好的默认拆分标准和何时选择停止拆分的标准
  • 内置了正则化防止过度拟合

image-20240610103424565

3.5 何时使用决策树

决策树和神经网络都是非常强大的学习算法,如何选择

Tree ensembles:

优点:

  • 表格(结构化)数据
  • Fast
  • 小型的决策树可以是人类可以解释的,可以方便打印查看

缺点:

  • 比单个决策树更加昂贵,计算预算有限,可能会使用单个决策树

Neural Networks:

优点:

  • 所有种类的数据,包括结构的和非结构化数据(照片,视频,文本)等
  • 可以和迁移学习一起使用

缺点:

  • 慢,需要很长时间来训练
  • 可以和迁移算法一起
  • 可以和多个模型一起工作,这可能很容易将多个神经网络串起来

image-20240610104852616

如果你的模型 需要很多小时来训练会限制完成循环并提升算法性能的速度,但由于决策树的训练速度往往非常快,因此可以更快的进入此循环,并且可能更有效的提升学习算法 的性能。

May the force be with you

标签:吴恩达,第二课,训练,算法,神经网络,Algorithms,np,节点,决策树
From: https://www.cnblogs.com/MyBlogForRecord/p/18240513

相关文章

  • 吴恩达机器学习第一课 Supervised Machine Learning Regression and Classification
    SupervisedMachineLearningRegressionandClassification第一周1.1机器学习定义1.2监督学习1.2.1回归在输入输出学习后,然后输入一个没有见过的x输出相应的y1.2.2classification有多个输出1.3无监督学习数据仅仅带有输入x,但不输出标签y,算法需要找到数据中的......
  • 吴恩达 机械学习笔记1
    机械学习的两个主要模型:笔记右下角有页码1.监督学习......
  • 算法金 | 吴恩达:机器学习的六个核心算法!
    大侠幸会,在下全网同名「算法金」0基础转AI上岸,多个算法赛Top「日更万日,让更多人享受智能乐趣」人工智能领域的权威吴恩达教授,在其创立的《TheBatch》周报中发表了一篇博文,概述了机器学习领域六种基础算法的历史和重要性。他强调了在这一领域不断学习和更新知识的必要......
  • 吴恩达机器学习 week1 一元回归模型的成本函数
    01学习目标    学习建立一元线性回归模型的成本函数02实现工具  (1)代码运行环境       Python语言,Jupyternotebook平台  (2)所需模块       NumPy,Matplotlib,lab_utils_uni      (lab_utils_uni是课程中用于绘制复......
  • 深度学习吴恩达学习记录 141-150
    人脸验证问题:对于进行人脸验证我们在数据库中可能只有每位员工的一张照片而已,然而要通过这一张照片验证出是否是库中的员工,同时如果在库中增加成员是否能验证出来,这种数据集实在太小,可以使用learningasimilarityfunction这个函数进行计算验证,其作用就是设置一个阈值,如果说对人......
  • 深度学习吴恩达学习记录 133-140
    目标定位:对于图像上的目标,如果进行识别后还需要将其在图上进行框出,我们就要多训练几个数据,一个就是识别目标的中心点,另外一个就是我设置圈出的长与宽可以记为bx,by,bh,bw;根据训练出的模型在图像检测上预测出这四个点的位置,当物体出现的时候就可以根据这个数据进行定位。当然要做......
  • 深度学习吴恩达学习记录
     经典网络:LeNet-5: AlexNet: VGG-16:  ResNet网络:先引入残差块的概念:远眺连接概念:如下图中,除了正常的全连接外,还有将第一层计算的激活函数值不经过第二层直接使用到第二层的激活函数中,这就是一种远眺连接。而下面这种远眺连接与全连接的一块神经就是残差块。所以对......
  • TheAlgorithms/C - 各种基础算法、数据结构的 C 语言实现+armink/SFUD - 一款基于 JED
    1、OpenMV-RT-基于恩智浦i.MXRT系列的开源机器视觉AI模块OpenMV-RT是一款基于恩智浦最近主打的i.MXRT超高性能系列MCU的视觉模块,模块设计者是恩智浦大牛工程师宋岩(对,就是ARMCortex-M3权威指南中文版作者)。模块源代码: https://github.com/RockySong/micropython......
  • 吴恩达机器学习-第三课-第三周
    吴恩达机器学习学习视频参考b站:吴恩达机器学习本文是参照视频学习的随手笔记,便于后续回顾。强化学习(reinforcelearning)什么是强化学习示例:如何让遥控飞机学会倒飞?监督学习并不适用,因为很难有好的数据集奖励函数,告诉飞机什么时候是表现好什么时候是表现差强化学习是你需要......
  • A Revisiting Study of Appropriate Offline Evaluation for Top-N Recommendation Al
    目录概实验设置EvaluationMetricsMetric的一致性不同的metrics导致的算法排名差异SampledmetricsSampledmetrics是否会导致和fullranking的metrics不同的评价数据集构建数据集的选择和预处理\(k\)-corefiltering的影响数据集的切分数据集的切分方式对结果的影响数据......