第十七节逻辑回归之交叉熵损失函数 (2)
上一节中我们讲解了逻辑回归是做分类的原因, 本节的话我们讲解逻辑回归的损失函数 - 交叉熵损失函数. 逻辑回归, 是要做分类的, 最重要的是要去分界, 这个逻辑回归它是怎么找分界? 首先它有回归两个字, 我们可以转成另外两个字, 拟合. 所以逻辑回归找分界, 它首先干的事情是拟合原有的数据, 然后再来找分界, 怎么找?
如果知道已知的数据点, 用曲线来进行拟合, 之后找到某一个位置可以对原有的 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 来作为分界点. 实际上这就是逻辑回归的设想.
逻辑回归它给出这样一个缩放的函数, 满足最后缩放的区间是 0 到 1 之间, 并且在我们原本 y= θ^T*X 的这个位置, 满足缩放后的位置刚好是对应 0.5 才合适. 所以 sigmoid 函数, 本身是一个 S 曲线的意思, S 型的曲线有无穷无尽种, 你可以找很多 S 曲线, 这里选用的 S 曲线特点是:
你会发现, 如果θ^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 曲线尽可能通过我们已有的所有的点. 尽可能是人类语言的描述, 我们就要把尽可能的给它变成公式, 变成数字的表达, 然后让计算机去算, 让它尽可能的误差最小的时候.
总结下我们的目标就是: 构造一个函数更好地解决二分类问题, 并且使得这个函数输出一个 (0,1) 的实数代表概率. 通过上面的结论, 我们知道这个函数比较好的是 sigmoid 函数, 即:
这里面的 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 这个位置的概率是多少, 这是它的实质.
我们再来解剖下 z 的图像的含义: g(z) = 0.5 时 ,W^T*X = 0 在二维平面下是一条直线. 如果是一维的情况下, 只有一个轴, 找到一个点将数据分开, 如果有两个维度, x1,x2, 对应一个平面, 我们要找到一条直线把它分开. 比如下图:
红色和绿色是已知的数据点, 是不同的类别, 当 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,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(θ), 即:
它的连乘可以通过 log,ln 变一下. 实际上就是 L(θ), 大写的 L, 然后取个对数, 把它变成 l(θ), 小写的 l. 即:
解释下上面公式: 因为 log(a*b)=log a+log b, 所以从第一个公式化简到第二个公式, 所以 L(θ), 把它变成对数形式 l(θ), 连乘就变成连加, 从第 1 条加到第 m 条. 又 log x^2=2log x, 所以从第二条化简为第 3 条公式, 即化简为上面公式.
我们要使得整体似然函数最大, 而此时这样一个公式, 就成为我们的目标函数. 但是搞机器学习的人喜欢去把它换个名称叫损失函数, 一般提到损失函数我们都是要找最小. 这件事情很简单, 如果要找它的最大, 就相当于在前面添个 -, 找添上 - 之后的整体最小. 所以逻辑回归的损失函数就推导出来了.
所以简单归纳起来就是首先要根据 y 的真实情况的概率表达, 推导出比较泛化的对每条样本的概率表达, 然后我们再来一个总似然的概率表达, 然后把这些东西带进来, 就得到 L(θ), 然后接着取对数, 得到 l(θ), 最后人为的加一个负号, 这就是损失函数. 逻辑回归比 mse 要简单的多.
它有什么含义呢? 它是从最大似然理论推出来的, 通常前面加一个负号. 即:
我们会称为交叉熵. 所以很多时候一提到分类, 就会提到交叉熵损失函数. 这个就是逻辑回归里面的损失函数, 它前面是一个负号, 所以我们一定要找到交叉熵最小的情况.
熵是什么意思? 高压锅在熵特别大的时候它会爆炸, 因为熵从物理上来说, 它代表分子的不确定性. 分子越不确定, 它就乱撞, 在高压锅里面乱碰乱撞, 总之它代表是不确定性. 不确定性越大, 就代表熵越大. 这个含义也被引入到了信息论里面去, 熵越大, 就代表了所包含的信息量越大.
熵越大是件好事还是件坏事? 要是研究原子弹, 肯定越大越好. 放到机器学习里面, 熵越小越好, 因为咱们希望它是有规律的, 是确定性的. 所以概率越大, 熵就越小. 比如说这个人它注定是你一身的伴侣, 注定的情况下, 就意味着这件事情概率特别大, 不确定性相反就会变小, 不确定性变小就是熵变小. 所以概率越大, 不确定性越小, 熵越小. 概率越小, 不确定性越大, 熵越大.
我们现在找的就是熵越小的情况下, 概率越大, 概率越大就越能说明已知的 x 根据我们的某组 w, 它就越确定最后的结果是真实 y, 我们要使得这个概率最大. 这个是它的本质.
下一节中我们对交叉熵损失函数进行扩展, 并且分解下怎么求解交叉熵损失函数.
来源: https://www.cnblogs.com/LHWorldBlog/p/10791908.html