大白话5分钟带你走进人工智能-第十七节逻辑回归之交叉熵损失函数概念(2)

  第十七节逻辑回归之交叉熵损失函数概念(2)html

上一节中咱们讲解了逻辑回归是作分类的缘由,本节的话咱们讲解逻辑回归的损失函数-交叉熵损失函数。逻辑回归,是要作分类的,最重要的是要去分界,这个逻辑回归它是怎么找分界?首先它有回归两个字,咱们能够转成另外两个字,拟合。因此逻辑回归找分界,它首先干的事情是拟合原有的数据,而后再来找分界,怎么找?算法

若是知道已知的数据点,用曲线来进行拟合,以后找到某一个位置能够对原有的0和1类别,两类数据进行一个很好的分开。固然线性回归也能够来分类,经过回归找到一个分界点X,小于分界点的X属于某个类别,大于分界点的X属于另外一个类别。为何分类必定要找这个点?由于作分类的目标是要训练出一个模型,而后根据这个模型,咱们把将来新的数据xnew带进来,它能够给咱们一个预算结果ŷ,一个分类号,对于二分类来讲,它必须得给一个0类别号或者1类别号。因此要根据分界点把每一个数据区分开。咱们怎么找到一个很好的分界点?由于y= θ^T*X,它的结果是负无穷到正无穷之间,所以Y=0零是比较合适的一个分界点。假如咱们让y= θ^T*X的负无穷到正无穷之间的值缩放到0到1之间,让每一个值都具备一个几率的含义,越接近零就说这件事情发生的几率越低越小,越接近1就说明这件事情发生的几率就越大。这时候再找一个分界点区分开以前的数据,能够天然而然的想到 是0.5,0.5是50%,就是说它属于负例的几率是50%,它属于正例的几率也是50%。因此咱们就能够找0到1之间的0.5来做为分界点。 实际上这就是逻辑回归的设想。app

逻辑回归它给出这样一个缩放的函数,知足最后缩放的区间是0到1之间,而且在咱们本来y= θ^T*X的这个位置,知足缩放后的位置恰好是对应0.5才合适。因此sigmoid函数,自己是一个S曲线的意思,S型的曲线有无穷无尽种,你能够找不少S曲线,这里选用的S曲线特色是:机器学习

                                                                                                            f(x)=\frac{1}{1+e^{-\theta^Tx}}

你会发现,若是θ^T*X=0的话,f(x)的值恰好等于1/(1+1)=1/2=0.5。因此对f(x)来讲就以0.5做为一个分界。也就是说若是咱们要去作分类的话,所计算出来的θ^T*X>0是正例,θ^T*X<0是负例。带到sigmoid函数里面去,f(x)就是y轴,算出的y轴,所对应的值就是大于0.5是正例,小于0.5是负例。所以咱们的目标是找到y是0.5的状况下所对应的x是多少,这样咱们就能够用x或者用缩放完以后的y=0.5来做为分界点,对将来数据进行分类,一个是X轴上的维度,一个是y轴上的维度。函数

咱们再结合图形来看下对应的函数:学习

S曲线其实是y=1/(1+e-θTx),x,y,e,1都是已知的,惟独只有θ须要去计算,因此算出来的θ参数就是咱们的模型,因此这个模型就是去找一组θ,使得θ^T*X缩放以后对应的S曲线尽量经过咱们已有的全部的点。尽量是人类语言的描述,咱们就要把尽量的给它变成公式,变成数字的表达,而后让计算机去算,让它尽量的偏差最小的时候。url

总结下咱们的目标就是:构造一个函数更好地解决二分类问题,而且使得这个函数输出一个 (0,1) 的实数表明几率。经过上面的结论,咱们知道这个函数比较好的是sigmoid函数,即:spa

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

这里面的Z=w^T*X。若是咱们把w^Tx当作一个总体Z ,f(x)就是关于Z的函数,咱们定义为g(z),它给出的结果是0到1之间的一个值,咱们说若是它小于0.5表明负例,若是大于0.5,它表明正例。即 g(z) <0.5 时, 判断y=0。g(z)>=0.5时, 判断y=1。好比某条数据带到这个公式里,而后它给出一个ŷ值,这条ŷ数据具体值含义是,它是1类别的几率有多大。好比最后算出来的值是0.85,0.85是大于0.5,那就意味着这条数据它是1这个类别是正例的几率是85%。若是另一个x new传进来获得的结果是0.05,首先0.05小于0.5,因此确定给它分到0这个类别,它就意味着它是1这个类别的几率是0.05,相反它是0类别的几率就是1-0.05,就是0.95。因此实际上得出的ŷ值它表明是该条数据是1这个位置的几率是多少,这是它的实质。3d

咱们再来解剖下z的图像的含义g(z) = 0.5 时 ,W^T*X = 0 在二维平面下是一条直线。若是是一维的状况下,只有一个轴,找到一个点将数据分开,若是有两个维度,x1,x2,对应一个平面,咱们要找到一条直线把它分开。好比下图:code

红色和绿色是已知的数据点,是不一样的类别,当wTx=0的话,就意味着w1*x1+w2*x2+b=0,正好是图中的分界线,将数据分割了两个类别。由于这个地方带有截距,因此没有穿过原心点。直线左侧的x经过计算会让g(z)<5,也就是说这里面红颜色的就是小于0.5的负例,绿颜色就是大于0.5的正例。这个东西很简单,以前说的一维状况下,就把小于0的设为负例。

 因此看起来咱们找到了分类的方法,那么如何肯定g(z)?实际上肯定了一组w, 就肯定了 z,由于Z=w^T*X肯定了z 就肯定了 g(z) 的输出。这里的g(z) 也能够写成 g(w,x),表明每条样本所对应的输出。它应该有如下特色,首先值是0到1之间,有几率含义;其次这个几率的含义就是在已知w和x的状况下,它是1类别的几率是多少。咱们转化成数学形式的表达就是:以w.x为条件,它的y是1的几率。即:

P(y=1|w,x),天然而然以w.x为条件,它的y是0的几率,即P(y=0|w,x)=1- g(z),是相反的。

因此咱们的指望是找到一组w使得已有的数据x为已知的条件下,你预测出来的ŷ发生的几率最大,也就是但愿预测出来的ŷ和手头上已经拿到的y一致。什么是不一致,什么是偏差?ŷ-y是误差,偏差。对于分类来讲,真实的y要么是0,要么就是1。对于ŷ来讲,它是一个0到1之间的一个值。若是它真实是1类别,咱们的ŷ计算出来结果又正好是1.0,百分之一百准确。若是咱们真实类别是1,计算出来是个0.2,这个偏差就是0.8。若是你真实的类别是0,你计算出来是0.2,那这个误差就是0.2。由于它最完美的状况就是0这个类别几率就是0,1这个类别几率就是1.所以咱们指望就是只要让咱们的g(w,x)函数在训练集上预测正确的几率最大,个人g(w,x)就是好的g(w,x)。

举个例子,好比下面的数据集:

 

x1,x2,x3,x4分别表明不一样的维度,y就是真实的y类别号。咱们要求的结果是每一个维度所对应的模型w。而咱们预测正确的几率,就是ŷ=1/(1+e-θ^T*x),即g(w,x)。它是1类别的几率是g(w,x),它是0类别的几率就是1- g(w,x)。咱们结合最大似然的思想。回顾前面咱们所学的知识最大似然的总似然是怎么求的?就是要获得每条样本的几率相乘。而当咱们求出一组模型来的话,此时的总似然就是咱们对应这个模型下每个样本的几率相乘,而每个样本此时的几率就是咱们预测正确的几率值。咱们最大似然的前提是假设这里面的每条样本它是随机而且独立的从全部的样本里面采样的这一部分,因此假如咱们的训练集里面就这五条数据,而且每条样本之间相对独立。对于咱们这五条样原本说,这里面总的MLE(最大似然)就是第一条样本乘以这组w,而后再带到Sigmoid函数里面去获得g(w*x1),这个X1,表明第一条样本,第二个就是g(w*x2),X2表明第二条样本,第三个就是g(w*x3),第四条是1-g(w*x4),第五条样本是1-g(w*x5),连续相乘,获得总似然。即:MLE=g(w*x1)*g(w*x2)*g(w*x3)*1-g(w*x4)*1-g(w*x5)。这里面的x1,x2,x3,x3,x5分别表明每一行样本。简化一下就是:

                                                              $g(w * x)^{3} *[1-g(w * x)]^{2}$

咱们只因此将样本预测出来的几率写成g(w,xi)或者是1-g(w,xi),是由于咱们看了一眼真实的y=1,才把它写成g(w,xi),看了一眼真实的 y=0给它写成1-g(w,xi)。即:

                                                            

若是要没看y是1仍是0,来表达一个形式的话,那就是下面泛化的形式,它均可以来表达这两种状况。对于每一条数据预测正确的几率即:

                                                             

假设这条样本,它的lable标签y是1,放到公式中,1-yi=0,后面一部分是1,剩下就是g(w,xi)。若是yi=0的话,前面这部分就是1,后面这部分是1-g(w,xi)。因此说这种形式是不看yi是1,0的状况下,就能够知道几率如何来经过公式来描述和表达。 若是咱们有n条样本,要作一个总似然,要把全部条样本的几率相乘.即

                                                              

由于假设独立了。因此用一个连乘符号∏,从第1条样本一直乘到n条样本。pi就是上面的单个预测正确的式子。咱们获得了一个总似然的式子,记P(所有正确) 为 L(θ),这里的θ为以前的w,记g(w,xi)为h(θ),即:

                                                            $L(\theta)=\prod_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)\right)^{y^{(i)}}\left(1-h_{\theta}\left(x^{(i)}\right)\right)^{1-y^{i}}$

它的连乘能够经过log,ln变一下。实际上就是L(θ),大写的L,而后取个对数,把它变成l(θ),小写的l。即:

                                                           $\begin{aligned} l(\theta) &=\log L(\theta)\\ &=\prod_{i=1}^{m}log\left(h_{\theta}\left(x^{(i)}\right)\right)^{y^{(i)}}+log\left(1-h_{\theta}\left(x^{(i)}\right)\right)^{1-y^{i}}$\\ &=\sum_{i=1}^{m}\left(y^{(i)} \log h_{\theta}\left(x^{(i)}\right)+\left(1-y^{(i)}\right) \log \left(1-h_{\theta}\left(x^{(i)}\right)\right)\right) \end{aligned}$

解释下上面公式:由于log(a*b)=log a+log b,因此从第一个公式化简到第二个公式,因此L(θ),把它变成对数形式l(θ),连乘就变成连加,从第1条加到第m条。又log x^2=2log x,因此从第二条化简为第3条公式,即化简为上面公式。

咱们要使得总体似然函数最大,而此时这样一个公式,就成为咱们的目标函数。可是搞机器学习的人喜欢去把它换个名称叫损失函数,通常提到损失函数咱们都是要找最小。这件事情很简单,若是要找它的最大,就至关于在前面添个-,找添上-以后的总体最小。 因此逻辑回归的损失函数就推导出来了。

因此简单概括起来就是首先要根据y的真实状况的几率表达,推导出比较泛化的对每条样本的几率表达,而后咱们再来一个总似然的几率表达,而后把这些东西带进来,就获得L(θ),而后接着取对数,获得l(θ),最后人为的加一个负号,这就是损失函数。逻辑回归比mse要简单的多。

它有什么含义呢?它是从最大似然理论推出来的,一般前面加一个负号。即:

                                                -\sum_{i=1}^{m}\left(y^{(i)} \log h_{\theta}\left(x^{(i)}\right)+\left(1-y^{(i)}\right) \log \left(1-h_{\theta}\left(x^{(i)}\right)\right)\right)

咱们会称为交叉熵。因此不少时候一提到分类,就会提到交叉熵损失函数。这个就是逻辑回归里面的损失函数,它前面是一个负号,因此咱们必定要找到交叉熵最小的状况。

熵是什么意思? 高压锅在熵特别大的时候它会爆炸,由于熵从物理上来讲,它表明分子的不肯定性。分子越不肯定,它就乱撞,在高压锅里面乱碰乱撞,总之它表明是不肯定性。不肯定性越大,就表明熵越大。这个含义也被引入到了信息论里面去,熵越大,就表明了所包含的信息量越大。

熵越大是件好事仍是件坏事?要是研究原子弹,确定越大越好。放到机器学习里面,熵越小越好由于我们但愿它是有规律的,是肯定性的。因此几率越大,熵就越小。好比说这我的它注定是你一身的伴侣,注定的状况下,就意味着这件事情几率特别大,不肯定性相反就会变小,不肯定性变小就是熵变小。因此几率越大,不肯定性越小,熵越小。几率越小,不肯定性越大,熵越大。

咱们如今找的就是熵越小的状况下,几率越大,几率越大就越能说明已知的x根据咱们的某组w,它就越肯定最后的结果是真实y,咱们要使得这个几率最大。这个是它的本质。

 

咱们看下熵和几率的图示关系:

 

 

横轴是几率probability,纵轴是熵 entropy。几率最大是1.0,熵没有尽头,几率越大,熵就越小,好比说几率达到1.0的时候,熵就是0。几率越小,熵就越大,越趋于正无穷。它是一个带拐弯的曲线。对比log函数单调递增,若是咱们反方向画出log函数,熵的图像相似反方向的log函数。

 

再来看下咱们的损失函数:

 

                                                                -\sum_{i=1}^{m}\left(y^{(i)} \log h_{\theta}\left(x^{(i)}\right)+\left(1-y^{(i)}\right) \log \left(1-h_{\theta}\left(x^{(i)}\right)\right)\right)

左边一部分是yi=1的状况,右边一部分是yi=0的状况,其中log hθ(xi)是咱们预测的ŷ,前面y^(i)是咱们真实的样本类别,因此yi*log pi,它是交叉熵的公式核心的一部分。若是类比多个分类(k个分类,m个样本),能够天然而然推导出目标函数l(θ)公式应该是,0到k个类别各自的yi*log pi累加,而后再从样本1到m加和,实际上这个就是softmax回归的损失函数,即交叉熵,Cross Entropy,公式是:

 

                                                                         $-\sum_{i=1}^{m} \sum_{j=0}^{k} y_{i} \log p_{i}$

 

事实上全部的分类,它的损失函数都是交叉熵。只不过逻辑回归里面的pi是根据Sigmoid函数1/(1+e-z)算出来的。若是有人发明了另一种算法,算出来以后几率不是用这样的公式,无非用交叉熵的时候,hθ(x)的形式变了而已。其实前面推出交叉熵公式的时候,也并无涉及到前面说的Sigmoid函数,因此它的推导跟Sigmoid函数没有关系。只不过逻辑回归的损失函数在算hθ(x)的时候用了Sigmoid函数。若是是其它算法,那就得用其它算法的公式来算几率。

 

总结下定义损失函数的步骤:由于要使得l(θ ) 最大的θ 生产出来的 g(θ,x) 全预测对的几率最大,但损失函数是要求某个函数结果越小 生成的模型越好,因此咱们定义 - l(θ )为逻辑回归的损失函数,即:     

 

                                                       $J_{\log }(w)=\sum_{i=1}^{m}-y_{i} \log \left(p\left(x_{i} ; w\right)\right)-\left(1-y_{i}\right) \log \left(1-p\left(x_{i} ; w\right)\right)$

 

问题转化为 找到一组使损失函数最小的w,下一步就能够用前面讲过的梯度降低最小化这样一个公式,而后找到w在什么状况下,使得损失函数最小。下一节中咱们对具体交叉熵损失函数怎么求解进行展开。

相关文章
相关标签/搜索