作者:GIfi炬辉_904 | 来源:互联网 | 2023-09-13 06:28
以下为在Coursera上吴恩达老师的DeepLearning.ai课程项目中,第一部分《神经网络和深度学习》第二周课程部分关键点的笔记。笔记并不包含全部小视频课程的记录,如需学习笔记中舍弃的内容请至
以下为在Coursera上吴恩达老师的DeepLearning.ai课程项目中,第一部分《神经网络和深度学习》第二周课程部分关键点的笔记。笔记并不包含全部小视频课程的记录,如需学习笔记中舍弃的内容请至 Coursera 或者 网易云课堂。同时在阅读以下笔记之前,强烈建议先学习吴恩达老师的视频课程。
1. 二分类问题
对于二分类问题,大牛给出了一个小的Notation。
- 样本:
前面过程的da、dz求导:
再对 和b进行求导:
梯度下降法:
6. m个样本的梯度下降
对m个样本来说,其Cost function表达式如下:
Cost function 关于w和b的偏导数可以写成所有样本点偏导数和的平均形式:
7. 向量化(Vectorization)
在深度学习的算法中,我们通常拥有大量的数据,在程序的编写过程中,应该尽最大可能的少使用loop循环语句,利用python可以实现矩阵运算,进而来提高程序的运行速度,避免for循环的使用。
逻辑回归向量化
- 输入矩阵X:
- 权重矩阵w:
- 偏置b:为一个常数
- 输出矩阵Y:
所有m个样本的线性输出Z可以用矩阵表示:
python代码:
单次迭代梯度下降算法流程
Z = np.dot(w.T,X) + b
A = sigmoid(Z)
dZ = A-Y
dw = 1/m*np.dot(X,dZ.T)
db = 1/m*np.sum(dZ)
w = w - alpha*dw
b = b - alpha*db
8. python的notation
虽然在Python有广播的机制,但是在Python程序中,为了保证矩阵运算的正确性,可以使用reshape()函数来对矩阵设定所需要进行计算的维度,这是个好的习惯;
如果用下列语句来定义一个向量,则这条语句生成的a的维度为(5,),既不是行向量也不是列向量,称为秩(rank)为1的array,如果对a进行转置,则会得到a本身,这在计算中会给我们带来一些问题。
如果需要定义(5,1)或者(1,5)向量,要使用下面标准的语句:
a = np.random.randn(5,1)
b = np.random.randn(1,5)
可以使用assert语句对向量或数组的维度进行判断。assert会对内嵌语句进行判断,即判断a的维度是不是(5,1),如果不是,则程序在此处停止。使用assert语句也是一种很好的习惯,能够帮助我们及时检查、发现语句是否正确。
可以使用reshape函数对数组设定所需的维度
8. logistic regression代价函数的解释
Cost function的由来
预测输出 的表达式:
其中, 。
可以看作预测输出为正类(+1)的概率:
当 时, ;当 时, 。
将两种情况整合到一个式子中,可得:
对上式进行log处理(这里是因为log函数是单调函数,不会改变原函数的单调性):
概率 越大越好,即判断正确的概率越大越好。这里对上式加上负号,则转化成了单个样本的Loss function,我们期望其值越小越好:
m个训练样本
假设样本之间是独立同分布的,我们总是希望训练样本判断正确的概率越大越好,则有:
同样引入log函数,加负号,则可以得到Cost function: