计划在9月4日(截止日期)之前完成DeepLearning的所有课程学习。每个课程对应一篇博客,根据学习进度随时更新。
参考课程
文章目录
(一)深度学习概论
1.结构化数据和非结构化数据
结构化数据是已经清楚定义并组织的数据,如数据库。
非结构化数据不具有结构化特征,如图片、音频等。
2.提高效果的方法
-训练更大的神经网络
-投入更大规模的标记数据
(二)神经网络基础
1.二分分类
举例:识别输入图像x中有/没有猫,返回y(有为1,无为0)
图片在计算机中的存储形式
使用向量x存储矩阵中的三组数据,组织成nx1的向量,并将每个向量作为一列组织成整体输入X(一种约定),输出Y则为1xm的向量。
2.Logistic回归
在二分分类问题中,得到的结果是输入符合要求的期望,因此需要介于0和1之间。采用σ函数满足该限制。
Loss Function:考察单个样本数据和实际结果的接近程度。选择该形式是因为其直观上是凸函数,有唯一极小值,避免非凸函数的多个极值情况,便于求解。
Cost Function:考察样本总体对实际结果的拟合效果。
3.梯度下降法
初始化w和b,每次选择梯度最大的方向前进,或者停在最终结果处,由于成本函数是凸函数,所以存在唯一极小值。
其中,α代表学习率,即前进步长。
4.计算图、计算图的导数计算
导数计算采用链式法则从右向左进行,即dJ/da = (dJ/du)*(du/da)
单个训练样本时同理操作。
5.Logistic回归中的梯度下降法
对代价函数的每个累加项对应求导即可得到偏导值。
图中的J,dw1,dw2,db是累加项,所以最终要除以m。而zi,ai,dzi对应每个训练样本的值。求累加值增量时,采用4中的链式法则的思想。
6.向量化
向量化避免了在程序中显式使用for循环,有效减少运行时间。
例子中的操作方法:
import numpy
a = numpy.random.rand(1000000)
b = numpy.random.rand(1000000)
c= numpy.dot(a, b)
该操作比for循环计算并累加效率高得多。所以每次需要for循环时,查看numpy中是否有可调用的内置函数,避免使用for循环。
根据以上例子,我理解的向量化是用向量的形式,组织每轮循环中得到的结果,利用numpy内置函数高效地计算出矩阵相乘的结果。
逆向传播时通过向量化消除了两层的for循环,即在一次步进中没有循环。但如果想要多次迭代,还需在外层添加计数循环。
7.Python广播
在矩阵元素的运算(区别于矩阵乘法)中,将规模较小的矩阵(其实是向量)进行若干次复制后,再对对应位置的元素进行运算。
使用assert保证矩阵是预期的形状,如assert(a.shape==(3, 4))。调用reshape方法可以将矩阵保持期望形状,如a = a.reshape(3, 3)。