目录
一.神经网络杂记
二.计算图(反向传播求导几个实例)
1.普通式子反向传播求导
2.逻辑回归中的梯度下降
3.m个样本的梯度下降
三.向量化
深度学习系列的文章也可以结合下面的笔记来看:
深度学习笔记-目录
一.神经网络杂记
这个系列的学习和机器学习系列的课程有很多重复的部分,尤其是神经网络的一些基础知识,以及什么回归等知识,所以很多东西如果我机器学习的文章当中有的话,我就略过了或者简单提一嘴。(可能有很多不同的内容,但是大部分已经在机器学习学过了,故而将本节取名为杂记)
可以看一下我的机器学习系列的入门文章(开头前缀是:“向毕业妥协系列之机器学习笔记”):
https://blog.csdn.net/weixin_44593822/category_12091831.html?spm=1001.2014.3001.5482
卷积神经网络我们还会学习很多不同类型的神经网络,比如CNN(适用于图像数据),RNN(循环神经网络,非常适合处理一维序列数据)
结构化数据和非结构化数据的直观理解:
为什么神经网络会兴起?看到下面的机器学习和神经网络的随着数据量的提升,他们性能上的变化就可以知道深度学习更加适合现在这个大数据时代。
下面是一个二元分类,简单提一嘴吧,想起了大三的时候学的CNN,当时也是这个例子,一张图片的每一个像素有红绿蓝三原色组成,即三个矩阵,三个矩阵的叠加,然后图片作为一个输入数据,展开成一个张量,比如一个64*64的图片,它的特征有64*64*3个特征。
符号定义 :
逻辑回归:
蓝色部分的符号是本门课用的符号,红色部分的符号可能在其他的资料中用这个,但是Andrew还是那句话:Don't worry about it
损失函数和成本函数:
损失函数定义的是单个训练样本的预测与真实值的差值损失,而成本函数是对于总体样本的的预测与真实值的差值损失
梯度下降:
略,老生常谈了都。
二.计算图(反向传播求导几个实例)
1.普通式子反向传播求导
可以说,一个神经网络的计算,都是按照前向或反向传播过程组织的。首先我们计算出一个新的网络的输出(前向过程),紧接着进行一个反向传输操作。后者我们用来计算出对应的梯度或导数。计算图解释了为什么我们用这种方式组织这些计算过程。
下图是一个式子的计算过程,我们的思维是从左到右一步一步最后得到结果,但是我们接下来讲解的如何求偏导,求解偏导的过程与这个方向是相反的,即从右到左。
反向传播求导过程:
先回忆一下高数中对于导数的理解,当然我快一年没学了,记不太清了,但是你要求J关于v的导数,是不是得看看J的增量和v的增量的关系,咱们看到下式J=3v,所以v从11变成11.001时,J变成了33.003,所J的增量是0.003,v的增量是0.001,所以导数是dJ/dv=0.003/0.001=3,这就完成了第一步反向传播。
然后我们再来看看a的变化对于J有什么影响,即求dJ/da
上图可以看到我们让a从5变到5.001,那么v就会从11变到11.001,继而J就会从33变到33.003,所以继续用J的变化量去除a的变化量,得到dJ/da=3,用v的变化量去除a的变化量就能得到
dv/da=1,然后咱们根据公式可以看到,a的变化可以引起v的变化,v的变化可以引起J的变化,所以当求J对a的导时,可以应用链式法则,即dJ/da=(dJ/dv)*(dv/da)=3*1=3,所以反向传播求dJ/da就是第一步反向传播是求dJ/dv=3,第二步求dv/da=1,然后第二跳到a的时候把这两步的导数乘起来得到咱们想求的导数即可。
另外咱们写代码的时候通常把自己最终要求得的那个导数(dJ/da)记为dvar,dJ/dv记为dv,dJ/da记为da。
用上面的方法来计算一下dJ/du(代码里记作du),有了上面的经验,下图可以看懂
同样的道理我们也可以计算出dJ/db和dJ/dc
2.逻辑回归中的梯度下降
a是yhat
3.m个样本的梯度下降
通过上节的推导咱们已经可以知道如何求对于单个训练样本损失函数的导,现在我们来看看对于成本函数求导。假设我们的例子中只有两个特征,如下用for循环对个示例依次遍历,最终得到dJ/dw_1,dJ/dw_2,dJ/db
三.向量化
也是机器学习中学过的概念,即尽量避免for循环,用矩阵运算什么的(numpy)。
可以看我机器学习的系列文章,也可以参考本篇文章开头给的深度学习笔记链接。