DeepLearning.AI Coursera公开课笔记(课程一第二周)DNN深度神经网络

1.二元分类问题

图1 二元分类实例

 如图1,二元分类问题是判断一个事物是与否,如上图所示,算法实现识别图中是否存在猫咪(有猫或者无猫)便是一种二元分类问题。

假如每张图片是64x64的大小,而且每张图片都是彩色的,也就是有RGB三种颜色组成,那么一张图片总共有64*64*3=12288。令n(x)=12288,这个n(x)便是我们的输入向量的大小(与上周x1,x2,x3,x4类似,只不过上次输入向量大小只有4这里是12288)。每张图片都有一个结果y(y=0非猫或者y=1是猫),这里将每个输入n(x)与对应的y相对应,就组成了我们的训练集。在python中,我们把训练集中的输入定义为X,其中X代表一个矩阵其维度为X[m,n]其中m是训练集中样本个数,n是训练集的单个样本输入个数(在上个例子中大小是12288),同理样本的标签y也有相应的矩阵Y[m],其中m是训练集的个数,Y中每个元素都与X中有着一一对应关系。

2.逻辑回归

 图2逻辑回归公式

 图2中列出了二元分类的逻辑回归预测公式。我们需要求的问题就是给出一个x,来预测yhat(y的预测值)的值,也就是求出yhat=1的概率有多大:

yhat=P(y=1|x)                         公式1

我们可以用逻辑回归公式来实现:

y=kx+b                                        公式2

公式2是一元逻辑回归公式,但是实际上我们的预测函数不可能是一条直线,因此逻辑回归公式应该写成下式:

y=w.t·x+b                                    公式3

其中w是一个矩阵,b是偏置量。

但是通过此公式求出的y,可能为负数或者大于1,此时我们用sigmoid函数,将输出z进行变换使其范围在0-1之间:

sigmoid(z)=1 / ( 1+e^(-z) )       公式4

3.求逻辑回归的损失值

在上一节中我们利用逻辑回归预测了yhat值,如何求得yhat与y之间的误差呢,第一种方式可以用均方差公式MSE.第二种就是本节中给出的公式

L(yhat,y)=-(y*log(yhat)+(1-y)log(1-yhat))  公式5

当y=0时L=-log(yhat)也就是yhat越大,损失越大。

当y=1时L=-log(1-yhat)也就是yhat越大,损失越小。

但是上式只是一个yhat值,而我们有m个训练集,因此我们要求m个训练集预测后的损失值平均。所以预测的总损失是:

公式6

4. 梯度下降

我们的目的最终是要使得最终的损失J(w,b)达到最小。因此我们求出J对于w的偏导dw/dJ,和J对于b的偏导db/dJ,令w=w-learning_rate*dw/dJ,b=b-learning_rate*db/dJ ,即让w,b沿着梯度下降的方向改变,将此过程迭代,便可以求出以w,b为参数的J(w,b)的极小值(其中lernning_rate是每次迭代的步长大小)。而通常这个极小值便是我们求得的J的全局最优解。通过梯度下降的方法我们就可以求出使得损失最小的w,b值。

5.导数、复合函数的导数

此节请参考高数上的知识。

6.逻辑回归的导数计算

假设我们的输入只有两个值x1,x2则,逻辑回归公式如下:

其中a代表逻辑回归计算后通过激活函数求得的激活值即a=sigmoid(z) 

其中J对的导数dJ/da为:

 a对z的导数为da/dz=a(1-a)  (sigmoid的导数)

所以J对于z的导数为dJ/dz=dJ/da*da/dz=a-y

z对w1偏导为dz/dw1=x1

所以J对于w1偏导为dJ/dw1=(a-y)*x1

同理可求得dJ/dw1,dJ/db

计算出J对w1、w2、db我们就可以将这些导数用于梯度计算迭代解出最优的w和b的参数。

7.m个样本的逻辑回归计算

图3 m样本求逻辑回归 

在视频中,使用了m次循环,求每个样本X[i]对dw1、dw2、db1的影响,并将这些值累加,最终求得m个样本的dw1,dw2,db1。此处使用了for循环的方法,但是在视频最后,Andrew介绍了一种更高效的方法,就是Vectorization(向量化)的方法,此方法可以通过矩阵的乘法来实现,去掉for循环步骤,在矩阵乘法中计算机可以进行并行处理来提高运行效率。

8.编程作业笔记

1)打平数据,将多维的样本数据打平:

X_flatten = X.reshape(X.shape[0], -1).T 

 2)标准化数据,为了使得学习速率提高,将数据范围变成0-1的范围,而不是0-255

train_set_x = train_set_x_flatten / 255.
test_set_x = test_set_x_flatten / 255.

3)np.exp(z),numpy计算矩阵z的指数。

4)np.zeros() ,用法输入元组大小列如np.zeros((x,y)) ,输出对应初始化为0的矩阵(x,y)。

5)np.sum(z),用法输入参数矩阵,求矩阵的和,可选输入axis,如果axis不为空,则只相加轴为axis的维度,其中列是第0轴,行是第1轴、以此类推。

5)np.log(z),计算z的以e为底的log值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值