吴恩达深度学习学习笔记

吴恩达教授的课可以在
1.Coursera(可以申请旁听免费)
2.DeepLearning AI(中国)
3.B站
4.网易云课堂(官方)
几个平台上面观看。
由于看视频后面可能会忘,可以翻看笔记快速回忆,免去来回看视频找知识点的痛楚。
笔记链接

配套练习:
github: https://github.com/robbertliu/deeplearning.ai-andrewNG
gitee: https://gitee.com/Mei_HW/deeplearning.ai-andrew-ng
kesci线上版目录:https://zhuanlan.zhihu.com/p/95510114

这是吴恩达deep learning的编程作业(含quiz)和黄博士写的配套课本(笔记)
链接:https://pan.baidu.com/s/1loWZxPn9wJGiZ0FIvZn8rw
提取码:bfft
编程作业的答案
B站评论区

2.9?学习了dvar的意思da,dw就是对应的导数
2.15 Python中的广播:axis的作用
2.16 关于向量的说明:提醒使用(5,1)这种形式,不要用(5,)这种形式,经常会出bug
2.18 从数学角度分析了logistic函数的损失函数为啥是那个
3.1 圆括号表示的是单个样本,方括号表示的是层
3.3 说了层的数字标号在哪里写
3.6 说了常见的几个激活函数
3.10 没看
3.11 随机初始化的时候不能初始化的一样的

4.1 介绍了一些符号,说符号定义会贴在课程里面https://blog.csdn.net/weixin_44917390/article/details/119676571
4.3 介绍了他自己用维数来查错的方法吴恩达深度学习学习笔记_第1张图片
第二课时
1.2 说了variance与bias,具体解释可看文章
1.4 正则化其实就是让神经网络变简单,防止把一些样本特有的特征也给拟合了,导致variance高,泛化性不强
1.6 dropout正则化:随机失活,随机消除
1.9 当输入特征X1,X2相差太大,比如X1属于[1,2],X2属于[1,1000],要归一化输入特征
1.11 神经网络的权重初始化:w可以设为1/n,n为输入的特征数量
2.1 mini batch:batch使用花括号,比如X{1},Y{1},
2.2 mini batch = 1即为随机梯度下降法,mini batch=m,相对噪声低些,幅度也大些(学习率),mini batch=1,相对噪声大,并且失去了向量化带来的计算速度的提高,小样本(<2000)直接batch。mini batch 考虑到电脑计算,一般设置为2的次方
2.8 融合momentum和RMSprop算法就是这种Adam算法形式吴恩达深度学习学习笔记_第2张图片
其中V是momentum算法里面的,下面更号是RMSprop算法里面的,加了一个西格玛(很小),防止出现分母为0的情况
吴恩达深度学习学习笔记_第3张图片
几个超参数,不过一般只会调整阿尔法
3.1 调试处理:怎么去选择超参数。画方格(但是这样会连续取五个相同的值),可以随机取值,然后呢找到较好的区域进行放大
3.2 超参数搜索的时候标尺不要用均匀标尺,用对数标尺,让落到不同数量级的概率一样
3.3 超参数调试的两种模式:熊猫模式(一步一步调试一个超参数模型)与鱼子酱模式(同时运行多个超参数模型,看哪一个好)。自己悟到了一点cost function的波动意义(波动就是因为学习率设置的比较大,设置较大的学习率可能会快速达到最优解附近,但是会震荡,设置小一点可能会下降慢,但是最后在很小范围内波动,但是刚才拿飞桨里面房价预测的问题跑了一下,好像不是这样。。。学习率)刚才思考了一下又有一些感悟,那张碗状图每一步并不是对一个训练数据来说的,而是对完成一个epoch(遍历一次训练集)来说的,每过一轮学习到一些特征,学习多了或者神经元多了会过拟合?分成batch既可以运用到向量化的好处,又可以学习更细?是哪个地方开始不能设置为0来着?又忘记了。
看一下飞桨那个房价预测(已经fork了)的代码顺序,每遍历一次训练集,就会保存一次model,下一个epoch拿出来作为基础继续训练(在上一轮中学习到了一些特征,下一轮继续学习)
3.6 解释了batch norm有什么用。mini batch越小,噪声越大(学习到的仅仅是这个mini batch的特征,不是整个训练集),正则化效果越好(泛化性越好)
吴恩达深度学习学习笔记_第4张图片
batch norm公式,就是神经元的两个计算,左边计算出来z之后,经过batch norm,再进入右边算a
吴恩达深度学习学习笔记_第5张图片
3.7说了batch norm中μ和西格玛方一般是粗略估计出来的,用指数加权平均等方法
3.8softmax层是用来输出多标签的,自己在这里回想到了加b(bias)的作用,不加bias最后其实整个网络都可以等同于一层网络。softmax就是把原来的激活函数改掉了,原来sigmoid输入一个real number,softmax输入一个4*1向量
3.9 hardmax是把最大的元素输出1,其它输出为0。还说了softmax的loss function。
在这里插入图片描述

1.1 改进策略
吴恩达深度学习学习笔记_第6张图片
训练集(Train Set)
开发集(Dev Set)development set
测试集(Test Set)
顾名思义,训练集主要用来训练机器学习模型的参数。开发集用来对不同的超参数进行选择,而且这一过程是个迭代过程,因为事先不知道哪个参数比较适合当前的问题,需要多次尝试。最后,测试集用来验证最终的机器学习系统的性能。
1.2 正交化就是调节某个方向,不影响其他方向。就像开车方向调节和速度调节互不影响,要是会互相影响就很麻烦
1.3 precision(查准率)和recall(查全率)从目标样本和全体样本两个角度来分析的。F1综合这俩指标
1.4 optimizing metric(优化指标)要追求极致(如accuracy准确度),satisficing metric(满足指标)要满足(如运行时间)
1.8贝叶斯最优误差(不会超过这个,除非过拟合)
1.9 正则化或手机更多训练数据让dev error接近training error。avoidable bias可避免误差。avoidable bias可以通过增大网络,延长训练时间来实现

2.2 深度学习对于随机误差(不小心标注错误)的鲁棒性比较好。dev set的作用是在两个模型中选出更好的。对dev test修正那对test set也要修正,保证同分布。修正错误标签之后,要对原来正确的数据也要检查。防止出现模型改变后原来对的变成错的了。train set一般不用改,因为上面说的深度学习对于随机误差鲁棒性比较好
2.4 数据来自不同分布,怎么分配train set,dev set,test set。
2.5 吴恩达深度学习学习笔记_第7张图片
加入training-dev set后怎么评价指标
2.6 误差分析找到dev set和training set的不同之处。人工合成训练集可能会导致对这一小部分过拟合。
2.7transfer learning迁移学习: pre-training预训练 和 fine tuning微调(把图像识别的模型挪到放射识别,把最后一层网络重新训练,或者数据够多把全网络训练) 使用情景:一个方向数据不多,另一个方向多,比如另一个已经学习到了图像的一些低级特征。
2.8 multi-task learning :吴恩达深度学习学习笔记_第8张图片
2.9端到端深度学习:中间不再需要手工组件。直接喂入数据集,就能得到输出,但是有时候分成几步会更好,分开后会有更多数据集

1.2:kernel(核)=filter(过滤器)
1.4 卷积后大小为(n-f+1*(n-f+1)。padding就是在图像周围填充,一般填充0,好处是可以防止图像在一步步卷积操作中逐渐缩小,还可以防止丢失边缘信息。 两种卷积方式,一种valid(不填充p=0),一种same(填充后卷积后大小不变)
1.5 stride步长 加入步长后维度的公式为:((n+2p-f)/s)+1 * ((n+2p-f)/s)+1
1.6 RGB的filter也是三维的,最后卷积结果是一维的。 文献里面chanel = depth
1.7 10个333的filter,无论图片多大,也只有280个parameters(参数),参数很少,避免了过拟合。
吴恩达深度学习学习笔记_第9张图片
CNN的一些符号
1.8 讲了卷积神经网络的流程,为什么会越变越细长
1.9 说了池化层。pooling的两个超参数,f(filter size)和s(stride),若f=2,s=2.则相当于高度和宽度缩减一半。有最大池化和平均池化。padding一般不动,为0. 若有几个channel,就一层一层来。 池化过程没有要学习的参数

2.2 说了三种经典论文里面的网络
2.3 说了残差网络
2.5 池化可以缩小长度和宽度。11卷积可以缩小通道数。
2.6 不知道使用3
3,55等等尺寸问题,可以使用inception网络,把它们全都堆叠在一起。 11卷积在inception网络中构建瓶颈层。可以减小计算成本
2.8 简单教了怎么用GitHub
2.9 迁移学习(transfer learning):你的数据集比较小,你可以把别人训练好的参数也拿过来,然后前面冻结,只训练最后的softmax层。数据集多的话就冻结的少一点。
2.10 数据增强(data augmentation):翻转,随机裁剪,调节RGB值(比方有的时候阳光会强一点就会发黄)。然后说了并行的线程thread实现。
2.11 ensembling和multi-crop(那个笔记里面还是有点解释的,这部分视频里面有点机翻的,literature文献翻译成文学,那个笔记里面改过来了)

3.1 目标定位:说了标签Y的的值分别代表什么。
3.2 关键点检测
3.3 滑动窗口检测
3.4 说了全连接层FC怎么改成卷积层。 滑动窗口的实现不用依靠连续的卷积操作来实现,直接输入一整张图片,后面可以一次性获得所有值。 滑动窗口的缺点是无法获得精确的框框柱目标
3.5 说了YOLO算法,找目标中心,分给对应的格子,所以不会出现一个目标分到两个格子里面。再给这个格子的label标签里面标上坐标信息。拿这个label去训练。 这个卷积共享了很多运算,没有每一个格子都跑一边算法。可以做到实时检测。 bx,by要小于1(因为中点要位于方框内)。bw,bh可以大于1(因为汽车可能边缘部分超过方框)
3.6 intersession over union(IoT)交并比判断结果好坏
3.7 Non-max suppression(非最大值抑制)保证不会好几个框框柱同一个。把和最准确框有很高占IoT的其它框删掉。多类别检测的话每个独立进行非最大值抑制。
3.8 之前每个格子只能输出一个标签,但是会有多个物体中心都在一个格子里面的情况,这个时候可以使用anchor box,两个label上下叠一起。 这些应该都是dataset里面标签用的。两个anchor box选择与你打好标签里面占并比更高的。
3.9 介绍了YOLO算法全流程。
吴恩达深度学习学习笔记_第10张图片
设定了两个anchor box,所以每个grid cell都会有两个框。然后再用非最大值抑制
3.10 介绍了带区域的cnn:RCNN,先用图像分割算法选出候选区域

4.2 one-shot learning问题,可以用similarity function,而不是之前的那些softmax function,这个函数输入两张图片对比相似度
4.3 Siamese network 比较两个图片输出范数平方
4.4 介绍了损失函数:triplet三元组
4.5 介绍了面部识别的二分类,可以提前把一个人脸的embedding存起来,减少运算量。
4.7 说了卷积网络的几层都在检测些什么东西。感觉这一块是偏感性的东西
4.8 说了风格迁移要定义两个损失函数,一个是内容,一个是风格。
吴恩达深度学习学习笔记_第11张图片

4.9 说了内容损失函数
4.10 这里矩阵用G因为在线性代数里面这种矩阵叫做Gram矩阵。其他没咋听懂。
4.11 说了三维和一维,一维就是序列模型了。

1.2 下标表示你要算出来的是啥,比如Wy意思是这个矩阵等下算出来的是y
1.7 模型模拟了任意单词序列出现的概率。 基于词汇和基于字符的两种形式。
1.9 GRU擅长捕捉长距离的依赖。a是激活值action,b是bias。
1.10 GRU和LSTM没咋听懂。。。
1.11 RNN和BRNN是两种传递方式。这两种传递方式的框有GRU和LSTM这几种。

2.1 one hot表示变成embedding。featurized representation
2.2 人脸识别的encoding和词的embedding其实一样,最后都是一个向量,包含了它的特征。
2.3 cosine similarity 用来计算两个向量之间的相似度。 s-SNE的为了将其在二维展示使用了非线性映射,所以看不出来那种非线性关系
2.4 嵌入矩阵*one hot = 这个词的嵌入向量,实践中一般不乘,直接提取
2.5 自己在想:要想训练网络那肯定要有标签,然后反向传播。
2.6 介绍了skip-gram model。 hierarchyical classifier分级softmax分类器,构造树,常用的词在上面。不过还会一般用负采样。Word2Vec的softmax操作很昂贵
2.8 实际上词嵌入的轴并不是理想化的某个属性,比如性别等,而是很多混在一起。
2.9 普通的情感分析把所有词嵌入加在一起平均,但是没有考虑到词序,可能很多good前面有一个not。可以使用RNN解决。
2.10 词嵌入除偏见。

3.1 seq2seq 和 image to sequence
3.2 相比之前随机输出翻译,机器翻译模型会找最有可能的英语句子翻译
3.3 beam search 来实现输出最有可能的英语句子翻译。bean width为3,就是每次保存最有可能的三个单词,若是贪心算法的话就只能保持一个了。每次都会选择前三种可能的,所以不会一直增大
3.4 取那个概率的最大值,因为项都小于1,所以可能最后数字太小不利于电脑浮点数存储,可以取log,这样小于1的数相乘就变成小于1的项相加了。 因为每个项都小于1,为了防止倾向与输出短句子,可以使用归一化,就是除以单词个数,还可以进一步在除的个数上加个指数阿尔法,为1就是除以个数,为0就是不除。阿尔法也是一个超参数
3.5 束搜索算法是一种近似搜索算法(an approximate search algorithm),也被称作启发式搜索算法(a heuristic search algorithm) 句子翻译效果不好,通过这一节教的误差分析可以分析出来是是RNN没做好(正则化或者加入更多数据,或者换一个网络结构)还是beam search没做好(增大集束宽度)
3.6 一句话有很多正确的翻译,不是唯一答案,怎么判断句子翻译的好不好呢,可以用Bleu:有一元组,二元组等等,算法是把翻译中的n个连续的词组在reference中出现的次数除以样本总词组数(描述不太清楚自己看去),最后除以一个用了几个元组。 防止倾向输出短句子,加上一个BP简短惩罚 自己对深度学习的理解刚刚一下子悟道了:给机器训练集,标签,接下来等它自己总结规律就行了,确实非常玄学,算力飞升过拟合,但是只要训练集够完美,算力提升就完事了
3.9 语音识别的CTC模型,解决了多输出的问题。可能有10秒*100HZ = 1000的输入,但是输出只有10个字母,可以把相邻相同的合并。

你可能感兴趣的:(人工智能,深度学习)