这个系列主要记述了笔者学习 Andrew NG 在coursera上的Deep Learning系列课程的笔记与代码实现(第一篇传送门:Andrew NG 深度学习课程笔记(一))。每篇笔记的内容大致包括一周的课程内容,网易上有课程视频,但没有作业,想要完成对应编程练习和证书还是需要到coursera上学习。(题图截取自deeplearning.ai网站)
今天的笔记包括两部份内容,一是实现神经网络过程中的技巧,如何不显式使用for循环来遍历整个训练集;二是为什么在训练神经网络时计算可以被正向转播组织为一次前向传播过程以及一次反向传播过程。这两部份内容都是以logistic回归做为例子来讲解的。另外,还有小篇幅介绍了高数中的求导(主要是为了帮助一些把高数还给老师的同学),下篇笔记会介绍Python中numpy的部份内容以及Python里处理向量计算的一些技巧。
接下来详细展开。
首先说一下逻辑回归。逻辑回归是一个二元分类算法。什么是二元分类算法呢?比如你用一个算法来识别一张图片是不是猫,是的话输出1,不是的话输出0,这个算法就是一个二元分类算法,结果只有两种可能,1或0。课程中的例子就是识别图片是不是猫,假如处理的是一张64*64像素的图片,那么红、黄、蓝三个原色的通道就可以用3个64*64的矩阵来表示,为了后续更有效的计算,会把输入样本里3个64*64的矩阵换成一个3*64*64=12288维的向量来表示一个样本的特征,m个样本就是[x1,x2,…xm], 其中x就是一个12288行1列的特征向量。后面会介绍为什么用这样的矩阵会更加有效。
逻辑回归我们可以表示成y^=wx+b的形式,但因为二分类问题,y的取值我们希望是0或1,但在实际情况中,也会希望输出一个0至1之间的概率,因此,我们使用了下图的sigmoid函数来,使y的取值映射在0至1之间,而且更重要的事,让线性的y^=wx+b函数变平滑了。这样,逻辑回归的工作就变成了找到合适的w和b, 使得计算出来的结果有最大的概率让y的取值接近1。
接下来介绍逻辑回归的的损失函数,loss function是用来衡量你的模型在一个样本上的计算偏差,cost function则是评价你的模型在全量样本上估计w和b的好坏。接下来要做的事就是选取一个初始的w和b, 通过不断的迭代,使得cost function计算出最小的值。很多方法里,都会使用0作为w和b的初始值,当然,使用一个随机值也行,因为在逻辑回归里,cost function是一个凸面体(如下图所示),所以总能找到那个最低点。
课程里接下来详细介绍了如何使用梯度下降法来迭代更新w和b, 使得cost function J可以得到一个最小值。概括的说,就是循环更新w, 每次更新的值是J(w)/w的导数。这里更新的导数值,也被称作learning rate。逻辑回归中使用梯度下降法,也就是在每次迭代过程中,找出learning rate, 用来修正下次一迭代的输入,直至结果收敛。
第二周课程后半部份是Python编程相关的内容了,如何使用Python做一些向量的运算,如何避免使用for循环来提升计算效率,这部份之后有时间再写了。