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