Binary Classification
逻辑回归算法是一个二元分类算法,如下为二分类的例子,输入一张图片,输出0或1来指明图上不是猫或是猫。
如果图像大小是64x64,那么会有3个64x64的实数矩阵,分别代表图像的Red、Green、Blue3个颜色通道。为了用向量表示这些像素矩阵,把这些矩阵的像素值展开为一个向量x,作为算法输入。
如下图把每个颜色的像素矩阵都stretch成nx1的矩阵,并在下面紧接着放入另一个像素矩阵,最终会得到一个非常长的向量,向量中列出了图像中红绿蓝三个通道的像素值,如果该图片大小为64x64,则该向量的维度为n(x) = 64x64x3 = 12288。
在二元分类问题中,目标是学习到这样的分类器,输入一幅以特征向量x表示的图像,然后预测对应的输出y是1还是0。
如果你有一个含有m个训练样本的训练集,你可能习惯于用一个for循环来处理这个m个训练样本,但当你实现一个神经网络的时候,你一般想训练整个训练集,但不显式使用for循环来遍历整个训练集。
单个样本由一对(x,y)来表示,其中x是一个n(x)维的特征向量,y是标签,取值为1或0,
训练集包含m个训练样本,所以训练集将被写成(x(1),y(1)) ,表示第一个样本的输入和输出 ,(x(2),y(2))代表第二个样本的输入和输出 ,直到(x(m),y(m)),表示最后一个样本输入和输出
m代表训练集的样本总数,训练集mtrain,测试集mtest。X是将训练集中的输入x(1)、x(2)....x(m)取出,按列排列到矩阵X中,因此,我们将x(1)放在矩阵的第一列中,x(2)放在矩阵的第二列中,直到x(m) 。这样,便得到了矩阵X ,因此,矩阵M将有m列,m即训练样本的总数 ,同时矩阵X有n(x)行。Y等于[ y(1) y(2) ... y(m) ] ,直到y(m) ,Y是一个1xm大小的矩阵。
Logistic Regression
使用逻辑回归算法会得到输出标签y,y在监督学习问题中全是0或1,因此这是一种针对二分类问题的算法,给定的输入特征x和一幅图片对应,希望识别这是一张猫的图片,希望用一个算法输出一个预测值,代表对真实标签Y的估计,也是预测标签y为1的概率,即这张图片是猫的概率。
x为nx维的特征向量,的向量,wzhuanzhi为为nx维的特征向量,转置后与x相乘,
,得到一个数后,加上偏置参数b。
而此为线性函数的输出,的值要在0和1之间,因此需要用sigmod函数,将值从0平滑地升高到1.
如果z非常大 e^(-z)就会接近0,所以sigmoid(z)就大约等于1 / (1+ 一个接近0的数字) ,因为 e^(很大的数的相反数) 会非常接近0,因此这项会接近1,事实上 如果你看左边的图,如果z非常大 那么sigmoid(z)非常接近1,相反地 如果z非常小,或者他是一个非常大的负值,sigmoid(z)会变成1/(1+ 很大的数) ),这项会接近0。
当实现逻辑回归时,目标是尽力学习到参数w和b,因此就能很好的估计y等于1的概率。
Logistic Regression Cost Function
每个训练集,用圆括号括起来的上标来索引不同的训练样本,比如说预测的第i个训练样本,也就是,希望其值接近真实标签
的值
Loss Function损失函数,用来检测每个训练样本的算法运行情况,即的准确度。如在算法输出时定义损失值为一个或半个平方差,但在逻辑回归里一般不进行此操作,因为当研究参数是,我们讨论的优化问题将会变成非凸问题,所以,优化问题会产生多个局部最优解,梯度下降算法也就无法找到全局最优解。因此在逻辑回归中,设定一个损失函数充当平方误差,这样能产生一个凸象最优问题,将使之后的优化变得更容易。
If y=1 : ,L越小,准确率越高,
越大,需要
越大
If y=0 : ,L越小,准确率越高,
越大,需要
越小
Loss Function
Cost Function代价函数,检测优化组的整体运行情况,即整体的正确率, 将每个实例的损失函数相加,取m的平均数,代价函数J运用W和B作为参数。损失函数适用于单一的优化示例,损失函数反应的是参数成本,所以在优化逻辑回归模型时,试着去找参数W和B来缩小J的整体成本。
Gradient Descent
通过损失函数来界定模型,衡量单一样本的训练效果,代价函数用来衡量参数w与b在整个模型中的作用效果。现在继续使用梯度下降模型去训练或去学习,来调整训练集中的参数w和b。
Recap
使预测值与真实值差值越小越好,则需要使代价函数越小越好,则需要不断调整参数w和b,下图为三维空间,代价函数J(a,b)是在水平轴w和b上曲面,因此曲面的高度就是J(w,b)在某一点的值,所以我们就是想要找到这样的w和b,使代价函数J到达最小值。
可以看到代价函数J是一个凸函数(convex function),凸函数,像一个大碗,非凸函数,有多个不同的局部最优解。因此,代价函数是一个凸函数
Convex(above) non-convex(below)
如下图,用一些初始值来初始化w和b,得到最上面的那个小红点,通常用0来初始化,随机初始化也有效,但逻辑回归通常不这么做,因为函数是凸函数,无论在哪里初始化,你应该达到同一点或大致相同的点。梯度下降法以初始点开始,然后朝最陡的下坡方向走一步,有可能走了那一步后,停在那里,因为正试图沿着最陡下降的方向走下坡路,或者尽可能快地下坡,这是梯度下降的一次迭代,两次迭代或许会到达那里,三次或更多。
Global optimum的点所对应的J(w,b)值最小,其对应的w和b的值就是最优参数解了。
Global Optimum
想找到J(w)的最小值,忽略b,仅仅用一维曲线代替多维曲线,此时,更新w的值,用公式来不断更新迭代,
表示学习率(learning rate),学习率可以控制我们在每一次迭代或梯度下降法中步长大小。
表示导数,用其作为导数的变量名,如图,算的是在一个点上的斜率,这个函数的斜率是高除宽,在这个点相切于J(w)的一个小三角形,w通过w自身减去学习率乘以导数来更新,导数是正的,则每次从w中减去这个乘积,接着每一次都向左边走一步,如果在一开始w参数的值就非常大,像这样梯度下降法会使你的算法渐渐地减小这个参数w。
Computation graph
已经学过神经网络的计算过程,由正向传播来进行前向计算,来计算神经网络的输出,以及反向传播计算来计算梯度或微分,计算图解释了为什么以这种方式来组织。
例子,用一个简单的逻辑回归或单层神经网络,试图计算一个函数J,它有三个变量a,b,c,函数为,分三步,首先计算u=bc,输入是b和c,然后计算v=a+u,它的输入是刚刚计算的u和变量a,最终J=3v。从左到右传播,计算J的值。
想要优化的J,代价函数在逻辑回归i的情况下,最小化,从右向左传播,这会是计算导数的最自然的方式。
Example
Logistic Regression derivatives
例子,若只有一个训练样本,该样本有两个特征向量x1,x2,为了计算z,需要输入w1,w2和b,还有特征x1,x2的值
,计算z,用方框框起来,接着计算
,
,接下来算损失函数L。因为我们要计算关于损失函数的导数,反向传播使,首先要做的是,计算损失函数对于a的导数,所以在代码中,只要用
来表示
,
,
,
更新参数: ,
,
Gradient Descent on m Examples
在m个训练样本上实现逻辑回归梯度。
回顾代价函数,求得是其平均值,是从第一个训练样本到第m个训练样本的预测值
与
之间的损失值之和的平均值。如下为训练算法。
初始化,我们要做的是在训练集中使用一个for循环,并计算每个训练样本的导数,然后将它们相加,所以这就是我们如何做到这一点,i是从1到m的循环,所以m是训练样本的数量,
是第i个样本的预测值,
是预测值的sigmod值,J加上第i个样本的损失函数,重新计算参数的导数,并更新参数,如下图👉边。如果该样本有s个特征,则有s个w。
矢量化Vectorization可以使代码高效不用循环。














网友评论