吴恩达DeepLearningAI课程学习资源和课程总结

一、学习资源:

吴恩达老师的DeepLearningAI课程分为5门课程:神经网络和深度学习、改善深层神经网络、结构化机器学习项目、卷积神经项目和序列模型。目前主要学习了前四门课程,遂做一些总结。以下是一些课堂学习资源:
1、课程的视屏资源在有道云课堂上有:
https://study.163.com/provider/2001053000/course.htm
2、另外还有黄海广博士做的详细的DeepLearning学习笔记(非常感谢):
https://github.com/fengdu78/deeplearning_ai_books
3、该课程的课后作业资源:
https://blog.csdn.net/u013733326/article/details/79827273

在学习这门课之前,如果之前完全没有学习过机器学习的相关知识,建议学习一下以下的两门课程,这样理解起来可能会更加轻松一些:
1、吴恩达老师的机器学习(Machine Learning)课程主要讲一些理论上的知识:
https://www.bilibili.com/video/av9912938?from=search&seid=10474547496833443625
2、黄海广博士做的详细的Machine Learning学习笔记:
https://github.com/fengdu78/Coursera-ML-AndrewNg-Notes
3、MOOC上面的曹健老师的tensorflow笔记课程,主要讲使用tensorflow进行神经网络的搭建:
https://www.icourse163.org/course/PKU-1002536002

话不多说,现在开始进行总结:
  (课程总结主要是针对本人的学习情况有侧重的进行的总结,对于初学者可能会难以理解。再者,吴恩达教授的视屏已经讲解得非常细致并且易于理解了,所以最好是查看原版的教学视屏会更好一些。以下总结知识用一种本人易于理解的方式将知识梳理了一遍,当然还有一些补充知识的链接。)

二、课程总结

第一课、神经网络和深度学习(Neural Network and Deep Learning)

1、什么是神经网络。神经网络包括标准神经网络、卷积神经网络(CNN,主要用在图像处理领域)、递归神经网络(RNN,主要用在语音处理领域)。
  在第一课中,作者主要介绍了使用神经网络处理逻辑回归的问题,神经网络主要包含输入层、中间隐藏层、输出层。输入层即特征的输入、输出层即标签的输出、中间隐藏层是神经网络算法的关键。中间隐藏层包括权值w,偏差b,还有针对非线性复杂模型的激活函数。
  如图所示的简易神经网络的表示,其中要提到的是z需要通过激活函数得到a值,a值即为下一层神经网络的额输入,z值属于隐藏层的中间值。
2、激活函数。主要的激活函数有sigmoid激活函数(现在基本不在神经网络上使用)、tanh激活函数、relu激活函数(使用最广泛)。现在常用到的激活函数是Relu激活函数而非sigmoid激活函数,主要是因为sigmoid激活函数在横轴数据比较大的时候梯度小,会减缓神经网络的迭代速度。如下图所示:
3、神经网络的损失函数,使用来衡量神经网络的运行情况的,损失值越小,代表该神经网络训练的越好。不同的具体问题会有不同的损失函数。
4、神经网络中的超参数。超参数代表不参与训练的参数,但是会影响到神经网络的训练效果。Learning rate(学习率)、神经网络结构(包括隐藏层数和隐藏层单元数目)、iterations(梯度下降法循环的数量)、choice of activation function(激活函数的选择)、损失函数优化方法、正则化方法、mini batch size(数据喂入量)。
5、深层神经网络。更深层的神经网络能够学习更加复杂的函数模型,但层数更多更复杂。(可以了解一下神经网络的反向传播过程)深层的神经网络可以理解为每一层都在完成相应的任务(如图像的特征提取)。层数越深,能够完成的任务越复杂,模拟的函数模型就越复杂。

第二课、改善深层神经网络:超参数调试、正则化以及优化(Improving Deep Neural Networks:Hyperparameter tuning, Regularization and Optimization)

1、训练、验证和测试集的选择。若数据量较小,则需要有一定的比例进行模型的验证和测试。
2、高偏差和高方差的问题。偏差是指训练集的误差,方差是指训练集的误差和验证集的误差之差。高偏差代表模型存在欠拟合现象,高方差代表模型在训练集的效果很好但是在验证集的效果很差,表示模型存在过拟合。所以,正确识别偏差和方差,合一为模型的下一步优化提供依据。
为了解决高偏差的问题,通常选择更大的网络即可;为了解决高方差的问题,通常需要加大数据集或者增强数据集,或者进行正则化。在实际操作中,应该先解决高偏差的问题再解决高方差的问题。
3、正则化。正则化是防止神经网络出现过拟合现象的有效方法。正则化参数的最重要的是lamda参数的设置,在实际操作中,lamda参数对网络性能有很大的影响。
  另外一种正则化的方法是dropout(随机失活)正则化的方法,dropout方法可以理解为使每一个节点的权重平均化(因为每一个节点都可能在本轮的训练中被去除)。因此dropout正则化的效果与L2正则化的效果类似。使用dropout正则化的方法时,用代价函数J来进行性能监控将变得没有意义,因为每一次迭代所使用的参数是不一样的。
下面一篇博客是关于介绍dropout知识的:
https://blog.csdn.net/program_developer/article/details/80737724
4、梯度消失或梯度爆炸的问题。对于极深的深度神经网络,会出现梯度消失或梯度爆炸的现象。梯度消失会导致参数更新过慢,梯度爆炸会导致参数更新过快,这都不是我们希望发生的事情。所以对于深层的神经网络,特别是达到几百层上千层,解决梯度消失或梯度爆炸的问题变得非常有必要。
  下面的博客对梯度消失和梯度爆炸的原因及解决方法讲解的比较透彻:
https://blog.csdn.net/qq_25737169/article/details/78847691
5、损失函数优化的方法(优化算法):mini-batch梯度下降法、momentum动态梯度下降法、RMSprop算法、Adam优化算法。
momentum动态梯度下降法是使用了指数加权平均的方法,使梯度的波动更加平滑,减少数据的波动。momentum动态梯度下降法是一种平均的思想,是根据以往的值的和现在的值来共同决定现在的值。

RMSprop算法,该算法的思想就是加速度大的我要抑制它变大,加速度小的我要让它更小。

Adam算法。是将动量梯度算法和RMSprop算法结合起来的一种算法。
关于优化算法的更多知识,可以查看一下博客:
https://blog.csdn.net/tsyccnh/article/details/76270707
6、学习衰减率的确定。随着训练轮数的加深,学习衰减率应该减小。
7、归一化网络的输入。将网络的输入值归一化在一样的范围,有利于参数的训练。同样的思想,每一层的神经网络的输入最好也能够进行归一化,即归一化网络的激活函数,z值。(这个地方还不太理解)

第三课、改善深层神经网络:结构化机器学习项目(Structure Machine Learning Project)

本课主要讲的是如何搭建一个神经网络以及搭建一个神经网络所需要注意的事项。

1、网络模型的评估。如何评判一个网络模型的好坏对于网络模型的参数选择有着至关重要的作用。一般而言,设置一个单一实数的评价指标,模型的参数选择会更加快一些。查准率(precision)和查全率(recall)和F1分数。
2、从哪一方面优化你的网络。一般而言,初始网络不应该过于复杂。应该用简单的网络试验之后再分析改进的方向。
使用模型的偏差和方差分析来进行下一步模型的改进,先解决高偏差的问题再解决高方差的问题。
误差分析。逐环节分析你的网络,找出导致误差最大的那个环节,也就是最迫切需要改进的环节。
3、迁移学习(transfer learning)。如果想用神经网络解决一个问题,却没有足够的数据量,可以选择一个相似的问题却有足够数据量的模型,然后将这个模型迁移到你所要解决的问题上,在进行少量数据的学习,也可以达到一定的效果。
4、多任务学习(multi-task learning)。可以解决同时识别多个物体的问题,在学习过程中,主要是对输出y进行设置。需要注意的是,多任务学习是对相似对象进行同时识别(相似问题的解决),核心思想是公用网络的前面层。
5、端对端的学习网络(end-to-end网络)。高智能化神经网络的代表,直接输入数据就可以输出结果,将所有中间处理过程交给模型去处理。
6、

第四课、卷积神经网络(Convolution Neural Network)

本课主要讲解了卷积神经网络的概念和原理。卷积神经网络主要用于图片的学习任务,卷积层可以看作是对图片进行特征提取,池化层可以看作是对特征的浓缩,全链接层可以看作是对数据的拟合。

1、什么是卷积神经网络。卷积神经网络的前向传播主要包括:卷积层(convolution)、池化层(pooling)和全连接层(full connect)。
卷积神经网络具体介绍可以看此门课第一周的学习内容。
2、卷积神经网络相比较于全链接层的神经网络有什么优势。参数共享,每一个卷积核可以看做是一个特征探测器,它运用在上一层网络的整个图片中,这样在达到良好效果的同时使参数数量更加小。稀疏链接,简单理解就是下一层的某一个输出只依赖于上一层的某几个输入。
3、经典卷积神经网络。分别是LeNet、AlexNet和VGGNet。
Lenet5和VGG-16的经典神经网络实现代码可以查看MOOC上面的曹健老师的tensorflow笔记课程。
4、残差网络(ResNets)。残差网络主要解决的是网络变得很深之后性能退化的问题。残差网络之所以会有作用,主要是因为;
残差网络学习使恒等函数变得非常简短,对于一个有良好性能的深层网络,若加上残块(无论在哪个地方加上),都不会影响让网络的性能降低,因为大不了就是作用和原有网络一样,并且性能还有可能会提升。
5、谷歌Inception网络。Inception网络的作用是智能地选择卷积核应该使用多大的size,是否该使用池化层,但是它的计算量太大。于是就运用到了1X1卷积核的概念。
  1X1卷积核可以改变数据通道数的大小(可以理解为压缩或者解压的功能)。Inception网络会使用1X1卷积核压缩网络,这一层叫做构建瓶颈层,至于构建瓶颈层会如何影响到网络的性能,这是一个值得探讨的问题。本课中的说法是,只要使用恰当,就不会有影响。
6、使用神经网络进行目标检测。使用神经网络进行目标检测,有下面的几个方法:
1、滑动窗口的卷积实现。要想实现滑动窗口的功能,第一步就是将全连接层变为1X1的卷积层。只能根据步长(步长有网络中的池化层决定)进行滑动,所以输出到的边界不是特别精确。

2、YOLO 算法。将图片分为3×3块或者是19×19块,然后对应制作33或1919的标签集。

anchor box。指一个图像块里面有两个或多个边框长宽比例差异很大的物体,需要对应用标签进行描述,这样更加有助于不同边框尺寸的物体的识别。

3、候选区域(Region proposals),利用图像分割选出候选区域。

7、人脸识别例程和风格迁移例程。详细可见视屏。

第五门课 RNN网络(未完待续…)

你可能感兴趣的:(深度学习,深度学习,机器学习,tensorflow)