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值。