吴恩达深度学习deeplearning.ai学习笔记(一)2.1 2.2 2.3 2.4

2.1逻辑分类/二元分类 logistic regression

经典问题:

假如你有一张图片作为输入,你想输出能识别此图的标签,也就是:如果是猫,输出1;如果不是猫,输出0。这是老吴最喜欢的猫检测器;

我们用y来表示输出的结果标签;

一张图片在计算机中是如何表示的?计算机保存一张图片,要保存三个独立矩阵,分别对应图片中红、绿、蓝三个颜色通道;如果输入图片是64$\times$64像素的,就会有3个64$\times$64的矩阵,分别对应图片中的红、绿、蓝三个通道的像素亮度;

要把这些像素亮度值放进一个特征向量里,就先定义一个特征向量x,然后将红色像素矩阵从第一行第一列开始放入,一行放完放下一行,再放绿色矩阵、蓝色矩阵的;

得到的特征向量是一个列向量,很长,它将图片中所有红绿蓝像素强度值都列出来,向量x的维度将会是64\times64\times3=12288,用n_x来表示输入的特征向量x的维度。此处n_x=12288

二分分类问题的目标是训练出一个分类器,它以图片的特征向量x作为输入,预测输出的结果标签y是1还是0,也就是预测图片中是否有猫。

符号规定:

1. 用一对(x,y)表示一个单独的样本,xn_x维的特征向量,y的值为0或1,即x\in \mathbb{R}^{n_x},y\in {\{0,1\}}

2. 训练集由m个训练样本构成,( x^{(1)},y^{(1)} )表示样本1的输入和输出,( x^{(2)},y^{(2)} )表示样本2的,……,( x^{(m)},y^{(m)} )表示最后一个样本m的输入和输出;

3. 如果是训练样本的个数,可以写为m=m_{train};如果是测试样本的个数,可以写为m=m_{test}

4. 为了用更紧凑的符号表示训练集,定义一个大写矩阵X,由以下构成:

X=\begin{bmatrix} x^{(1)} & x^{(2)} & \cdots & x^{(m)} \end{bmatrix}

因为x^{(1)} ,x^{(2)} ,x^{(3)} ,\cdots都是列向量,所以才如此横向堆放;

Xm列,n_x行,也称矩阵高度是n_x

在Python中,X.shape命令用于输出矩阵X的维度,即(n_x,m)

5. 定义一个大写矩阵Y,由以下组成:

Y=\begin{bmatrix} y^{(1)} & y^{(2)} & \cdots & y^{(m)} \end{bmatrix}

Y是一个1\times m的矩阵,即Y.shape=(1,m)

2.2 logistic回归

给定已知的输入特征向量x,你需要一个算法可以给出一个预测值\hat{y},可以说是对y的预测,正式地讲\hat{y}是一个概率:当输入特征x满足条件时,y=1的条件概率,即:

\hat{y}=P{\{y=1|x\}}

如果x是图片,你希望\hat{y}能告诉你这是一张猫图的概率;

参数是w(一个同样为n_x维的列向量)和b(一个实数);

\hat{y}和参数w,b之间的关系是怎样的呢?

假设\hat{y}=w^Tx+b,这样满足\hat{y}是一个数,但是并未满足\hat{y}是一个在[0,1]之间的概率的要求,一般把这种等式叫线性回归;

所以要引入\sigma函数:

\sigma(z)=\frac{1}{1+e^{-z}}

\lim_{z \to +\infty }\sigma(z)=1,\lim_{z \to -\infty }\sigma(z)=0

定义\hat{y}=\sigma(w^Tx+b)就确保了\hat{y}介于0和1之间;

并且\sigma函数的导数恒大于0,所以是单增的;

总之,logistic回归里你要做的就是学习参数w,b

2.3 logistic回归中的损失函数

为了让模型通过学习参数来调整参数,要给一个有m个样本的训练集:

\{(x^{(1)},y^{(1)}),(x^{(2)},y^{(2)}),(x^{(3)},y^{(3)}),\cdots,(x^{(m)},y^{(m)}) \}

希望通过训练集找到合适的参数w,b,来得到你对训练集的预测值\hat{y}^{(i)},i=1,2,3,\cdots,m,使它能接近于训练集的标签值y^{(i)},即尽可能让\hat{y}^{(i)}\approx y^{(i)}这里右上角带圆括号有数字的上标表示这是第几个样本的数据,后面会有方括号和花括号,要注意区分,剧透一下方括号表示是神经网络第几层的参数,花括号表示mini-batch中第几个子集的数据;

z^{(i)}=w^Tx^{(i)}+b

\hat{y}^{(i)}=\sigma(w^Tx^{(i)}+b)=\sigma(z^{(i)})

损失函数 Loss function L(\hat{y},y)应该如何定义?

如果定义为L(\hat{y},y)=\frac{1}{2}(\hat{y}-y)^2,当你学习这些参数时,后面讨论优化问题时会发现函数是非凸的,最后会得到很多个局部最优解,在使用梯度下降法时可能找不到全局最优值;当然有人也去研究了非凸函数的优化,建议看看老吴的采访视频,有很多启发;

我们通过定义损失函数来衡量你的预测输出值\hat{y}和实际值y有多么接近,一般设计成损失函数的值越小,代表接近效果越好,常用的logistic回归的损失函数定义为:

L(\hat{y},y)=-[yln\hat{y}+(1-y)ln(1-\hat{y})]

一个粗浅的理解是枚举,如果y=1,则L(\hat{y},y)=-ln\hat{y},训练时会往损失函数降低的方向前进,当损失函数尽量小时,ln\hat{y}会尽量大,\hat{y}就会尽量大,而它本身是一个值域为[0,1]的概率,就会使\hat{y}接近于1,这样就实现了\hat{y}\approx y;如果y=0,则L(\hat{y},y)=-ln(1-\hat{y}),损失函数最小化会使得\hat{y}尽量小,也就使得\hat{y}接近于0,同样实现了\hat{y}\approx y后面会有一节专门分析损失函数是如何设计出来的;

损失函数是在单个样本里定义的,它只衡量在单个训练样本上算法的表现;

成本函数 Cost function J(w,b)则衡量在全体训练样本上算法的表现,定义为:

J(w,b)=\frac{1}{m}\sum_{i=1}^{m}L(\hat{y}^{(i)},y^{(i)})

J(w,b)=-\frac{1}{m}\sum_{i=1}^{m}[y^{(i)}ln\hat{y}^{(i)}+(1-y^{(i)})ln(1-\hat{y}^{(i)})]

所以,要寻找合适的w,b使得J(w,b)最小。

2.4梯度下降法

一个直观的理解是当w简化成一维向量时,J(w,b)就是在以w,bx,y轴,而z轴代表高度的一个空间曲面,并且是像碗一样的凸曲面,所以理论上来说碗底存在一个点(w,b)能够使J(w,b)达到最小值,这个最小值点也叫全局最优解;

我们要做的就是初始化w,b,然后用梯度下降法一步一步去逼近这个全局最优解,一般是沿最陡的下坡方向去走每一步;在高数里,最陡的方向就是所谓的梯度;

为了简单起见,先忽略参数b,这样可以把J(w,b)看成是w的函数J(w),并且假定w是一维向量,画在一个二维图中:

只要重复进行以下运算,就能让任何初始点不断向最低点靠近:

w:=w-\alpha dw

其中,dw是编程时的变量名,它真正的含义是损失函数对w的导数:

dw=\frac{\mathrm{d} }{\mathrm{d} w}J(w)

\alpha是学习率,\alpha >0,它控制的是每一次梯度下降法的步长,也就是图中一个箭头走过多远;

能实现的原因:如果初始点在最低点右边,那么导数dw>0,进行一次运算就会让w变小从而靠近最低点;如果初始点在最低点左边,那么导数dw<0,进行一次运算就会让w变大从而靠近最低点;

推广到J(w,b)中就可以轻松得到梯度下降法的公式:

w:= w-\alpha dw

b:= b-\alpha db

注意这里的dw,db含义改变了,指的是损失函数分别对w,b的偏导数:

dw=\frac{\partial }{\partial w}J(w,b)

db=\frac{\partial }{\partial b}J(w,b)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值