注:参考B站视频教程
视频链接:【(强推|双字)2022吴恩达机器学习Deeplearning.ai课程】
1.2 神经元
1.3 需求预测
1.4 举例——图像感知
人脸识别问题是,你能否训练一个神经网络,以一百万像素亮度值的特征向量作为输入,并输出图片中人物的身份
2.1 神经网络中的网络层
三个神经元中的每一个都在执行一个小小的逻辑回归单元
上标【1】表示layer1(神经网络第1层)中的参数
2.2 更复杂的神经网络
2.3 神经网络向前传播
神经网络需要从输入X这个8*8矩阵预测出a3的概率
3.1 如何用代码实现推理
使用机器学习算法来优化咖啡的烘焙过程
使用Tensorflow做基于神经网络的推理
3.2 Tensorflow中的数据形式
Numpy是如何存储向量和矩阵的
两个方括号表示的是“二维矩阵”,一个方括号表示的是“一维向量”
张量tensor是Tensorflow团队创建的一种数据类型,可以有效地存储和执行矩阵运算
将数组传入Tensorflow时,Tensorflow喜欢将其转换为自己的内部格式,然后有效的使用张量;当你把数据读出来的时候,你可以把它作为一个张量或者将其转换为Numpy数组
3.3 搭建一个神经网络
Sequential把网络层串联起来形成一个神经网络框架。
调用model.compile()训练神经网络,调用model.predict()实现向前传播。
6.1 神经网络为何如此高效
向量化实现 matmul
2.3 为什么模型需要激活函数
为了引入非线性,提高模型的拟合能力
在隐藏层使用线性激活函数,在输出层使用logistic激活函数,结果这个模型等价于逻辑回归
经验法则:不要在神经网络的隐藏层中使用线性激活函数
3.2 Softmax
如何计算Softmax回归模型
Softmax回归模型是逻辑回归的推广
将表达式直接带入,这样就给了Tensorflow可以重新排列项并计算的能力
相比下,逻辑回归的数值舍入误差更大一点,建议用改进方法
神经网络的最后一层不再输出一些概率值了,not a1~a10 , is z1~z10
把逻辑回归和代价函数整合在一起,把输出值映射到Logistic函数中,得到概率
3.5 多个输出的分类
4.1 高级优化方法
如果一个参数wj或b在大致相同的方向上移动,就提高参数的学习率;
如果一个参数来回震荡,就减小参数的学习率。
机器学习诊断:指的是一种测试,你可以运行它来深入了解算法中哪些是有效的,哪些是无效的,从而明白应该怎样提升性能。其中一些诊断会告诉你,是否值得用几周或者几个月的时间来收集更多的训练数据,如果是的话,你就可以继续投入时间寻找数据,这有望提升性能;如果不是,那么进行诊断可以为你节省几个月的时间
模型在训练集上做的好,但是在测试集上表现得不好
分类问题
取一个数据集,把它分为训练集和一个单独的测试集,可以系统的评估你的学习成果;通过计算训练误差和测试误差,你可以衡量模型在训练集和测试集上的表现
1.3 模型选择&交叉验证测试集的训练方法
d是多项式的次数
可以尝试不同的模型,并根据计算误差来选择一个合适的模型,不过这种方法过于复杂,不太建议
划分为训练集&验证集&测试集
2.1 通过偏差与方差进行诊断
一个更系统的判断算法是否有高偏差或者高方差的方法是,看你的算法在训练集和交叉验证集上的表现
当你拟合一个越来越高阶的多项式时,训练误差会趋于下降;因为当你有一个非常简单的线性函数时,它并不能很好的拟合训练数据;当你拟合二阶/三阶/四阶多项式时,对训练数据的拟合越来越好;随着多项式次数的增加,J_train通常会下降
高偏差意味着算法在训练集上表现不好,高方差意味着,算法在交叉验证集上的表现比训练集上的差得多
高方差与高偏差同时出现的例子极少存在,是由于模型一半过拟合、一半欠拟合导致的
2.2 正则化、偏差、方差
J_train和λ分别作为横轴,两个图就像彼此的镜像
2.3 制定一个用于性能评估的基准
以语音识别应用为例
可能10.8%的误差意味着这是很高的偏差,但当我们按照人类水平进行基准测试时,我们看到这个算法在训练集上表现得很好,但是交叉验证误差远高于训练误差,因此该算法更多的是方差问题,而不是偏差问题
2.4 学习曲线
如果学习算法有很高的偏差,获得更多的训练数据本身不会有多大的帮助
不同的层可以选择不同的λ值
3.1 机器学习开发的迭代
垃圾邮件分类实例
3.2 误差分析
这种误差分析的要点是,手动检查一组算法错误分类或标记的样本。通常分析完以后,下一步要做什么的灵感就来了。有时误差分析还可以告诉你,某种误差非常罕见,不值得你花那么多时间来修复
偏差和方差分析可以告诉你收集更多数据是否有帮助;通过误差分析可知:增加邮件特征(外部:路由、标题...)会有所帮助,但也只是一点点;然而,添加检测垃圾或钓鱼邮件的更复杂的特征(邮件内容:包含xx关键字...)可能会有很大帮助;检查拼写错误机会没有多大帮助
误差分析的局限性,它更容易处理人类擅长的问题
3.3 添加更多数据
考虑数据扩充的一种方式是如何修改、扭曲或在数据中制造更多噪音。但在某种程度上,你得到的仍然和你在测试集中得到的很相似,这就是学习算法最终会做的很好的地方。
照片OCR是指自动让计算机读取出图像中的文本
这是来自照片OCR任务的真实数据,关键步骤是能够看到像这样的小图像,并识别出中间的字母。
左边的图像是来自世界上拍摄的真实图片,右边图片是用电脑上的字体合成的。通过像这样的合成数据,你可以生成大量的图像或者图片OCR任务的例子
3.4 迁移学习-使用其他任务中的数据
假设你想要识别从0到9的手写数字,但是没有那么多这些手写数字的带标签数据
迁移学习给人的直观感受是,通过识别猫,狗,牛,人等,它已经为处理输入图像的前几个层学习了一些合理的参数,然后通过将这些参数迁移到新的神经网络,新神经网络参数的初始值更合适了,这样我们只需要再让算法学习一点,它就能成为一个很好的模型。
首先在大型数据集上进行训练,然后在较小的数据集上进一步参数调优,这两个步骤被称为“监督预训练”
有人会把训练有素的神经网络发布到互联网上,免费授权给任何人下载和使用。这意味着,与其自己从头开始,不如下载别人可能花了数周时间训练的神经网络,然后用自己的输出层替换原有的输出层,并执行option1或option2来微调别人已经监督预训练的神经网络,只需要做一点微调,你就可以快速得到一个表现良好的神经网络。
为什么迁移学习会起作用?
帮助神经网络学习检测图像的一些基本特征,比如找到边缘、角、曲线、基本形状。
预训练的限制条件:对于预训练和微调这两步,图像类型x是必须相同的
3.5 机器学习项目的完整周期
4.2 精确率与召回率的权衡
Precision:预测为正样本中有多少是真的预测正确了(找的对)
Recall:样本中的正例有多少被预测正确了(找的全)
2.2 选择拆分信息增益
熵的减少称为信息增益
决定何时不再继续分裂的停止标准之一是:是否熵减少的足够少
基于耳朵形状的分裂,导致熵的减少最大,所以我们会选择在根节点上分割耳朵形状特征
计算信息增益的基本公式
p1left = 左子树中带有正标签的例子的比例,正标签表示猫
w1left = 所有根节点到左边子分支的样本的比例
2.5 连续有价值的功能
为了让决策树在每个节点上能处理连续值特征,使用划分时,只需要考虑不同的值来划分,计算信息增益,并决定对其分割。选择连续值特征能提供尽可能高的信息增益
3.1 使用多个决策树
事实上,仅仅改变一个训练例子就会导致这个算法在根节点产生一个不同的划分,形成了一棵完全不同的树,使得算法不那么健壮
集成树模型的最终预测
使用多个决策树能使整体算法对任何一棵树做的事情不那么敏感
3.3 随机森林
3.4 XGBoost
刻意练习:把更多的注意力放在做得不好的例子上
3.5 何时使用决策树