【学习笔记】李宏毅2021春机器学习课程第2.5节:Classification

1 Classification as Regression?

我们已经知道,Regression就是输入一个向量,然后输出一个数值,我们希望输出的数值跟某一个label,也就是我们要学习的目标,越接近越好。

image-20210320165723587

现在问题来到了如何做Classification,那一个很自然的想法就是:可不可以用Regression来处理Classification的问题呢?

image-20210320170048002

有这样一个非常naive的想法,那就是假设我们用Regression的方法后输出的值比较接近1,就说明是Class1,比较接近2,就说明是Class2,以此类推。这样就可以用Regression的方法完成Classification的任务。

但是这会是一个好方法吗,如果你仔细想想的话,答案可能是否定的。

image-20210320170353342

因为如果你假设说Class one就是编号1,Class two就是编号2,Class3就是编号3,意味着你觉得Class1跟Class2比较像,然后Class1跟Class3它是比较不像。假如真的是有这种关系的话,比如Class1 2 3是一年级,二年级,三年级,那可能一年级真的跟二年级关系比较接近,而跟三年级比较远;但如果你的三个Class本身并没有什么特定的关系,那使用这种方法就可能带来一些意外的结果

所有对于这种互相之间没有关系的Class进行区分,我们可以使用one-hot编码的方法。


2 Class as one-hot vector

One-Hot 编码,又称为一位有效编码,主要是采用N位状态寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候只有一位有效。

image-20210320170948476

如果有三个Class,我们把Class1编码为 [ 1   0   0 ] \begin{bmatrix}{1} \\\ {0}\\\ {0}\end{bmatrix} 1 0 0,如果是Class2编码为 [ 0   1   0 ] \begin{bmatrix} {0}\\\ {1}\\\ {0}\end{bmatrix} 0 1 0,如果是Class3编码为 [ 0   0   1 ] \begin{bmatrix} {0}\\\ {0}\\\ {1}\end{bmatrix} 0 0 1,每一个Class,都用一个 One-hot vector 来表示。

使用One-hot vector的表示方式,就可以看到这些Class两两之间的的距离都是一样的,这就保证了这些Class之间并没有相关性,

如果我们今天的目标y hat是一个向量 比如说,ŷ是有三个element的向量,那我们的network,也应该要Output的维度也是三个数字才行

image-20210320185241328

到目前为止我们所讲的network,其实都只Output一个数值,因为我们过去做的都是Regression的问题,所以只Output一个数字,但其实从一个数值改到三个数值,本质上是没有什么不同的,你可以Output一个数值,那么把本来Output一个数值的方法重复三次,你就可以Output三个数值。

image-20210320185906259

所以你就可以Input一个feature的Vector,然后产生 y 1 y_1 y1 y 2 y_2 y2 y 3 y_3 y3,然后希望 [ y 1   y 2   y 3 ] \begin{bmatrix}{y_1} \\\ {y_2}\\\ {y_3}\end{bmatrix} y1 y2 y3跟我们的目标类的向量表示越接近越好(就比如 [ 1   0   0 ] \begin{bmatrix}{1} \\\ {0}\\\ {0}\end{bmatrix} 1 0 0)。


3 Classification with softmax

在Regression的过程中,我们输入一个 x x x,输出一个 y y y,希望这个 y y y 要跟 label ŷ 越接近越好:

image-20210320190545539

那在Classification的过程中,输入一个 x x x,输出一个 y y y,这个 y y y 现在不是一个数值,而是一个向量,再和目标向量比较之前,我们往往还会把y再通过一个叫做Soft-max的function得到y’,然后我们才去计算y’ 和目标向量之间的距离。

image-20210320190621261

那为什么要加上Soft-max呢,一个比较简单的解释是这样的,由于这个目标向量是这个 ŷ 是One-hot vector,所有它里面的值都是0或1,但是我们的 y y y 却可能是任何的值,直接算距离显然不太对。

那既然我们的目标只有0跟1,我们把 y y y 也Normalize到0到1之间,这样才好跟 label 计算相似度。


3.1 Softmax

这个是Soft-max的block,输入 y 1 y_1 y1 y 2 y_2 y2 y 3 y_3 y3,它会产生 y 1 ′ y_1' y1 y 2 ′ y_2' y2 y 3 ′ y_3' y3

image-20210320193732150

它里面运作的模式是这个样子的:
y i ′ = e x p ( y i ) ∑ j e x p ( y i ) y_i'=\frac{exp(y_i)}{\sum_j exp(y_i)} yi=jexp(yi)exp(yi)
举一个简单的例子来看可能更加直观:

image-20210320194237298

原本输入的 y 1 = 3 y_1 = 3 y1=3 y 2 = 1 y_2 = 1 y2=1 y 3 = − 3 y_3 = -3 y3=3,最后输出了 y 1 ′ = 0.88 y_1' = 0.88 y1=0.88 y 2 ′ = 0.12 y_2' = 0.12 y2=0.12 y 3 ′ ≈ 0 y_3' ≈ 0 y30

可以看到这个Softmax可以把输出全部变为变成0到1之间,并且他们的和为1,除此之后,它还有一个附带的效果:它会让大的值跟小的值的差距更大,就比如原本输入的-3,最后得到的输出趋近于0。


4 Loss of Classification

image-20210320195929935

最终我们需要计算 y’ 跟 ŷ 之间的距离来评判分类器做出的判断是否准确,而对于这个所谓的距离,其实有许多定义,举例来说,我们可以让这个距离是Mean Square Error(MSE)
e = ∑ i ( y i ^ − y i ′ ) 2 e=\sum_i(\hat{y_i}-y_i')^2 e=i(yi^yi)2
但在分类问题中一个更常用的定义叫做Cross-entropy
e = − ∑ i y i ^ ln ⁡ y i ′ e=-\sum_i\hat{y_i}\ln{y_i'} e=iyi^lnyi
这个Cross-entropy的式子看起来感觉有点匪夷所思,为什么有这么奇怪的式子出现呢?

image-20210320201703299

事实上,Make Minimize Cross-entropy 其实就是 maximize likelihood,这是从概率论和数理统计上可以证明的。接下来还是通过举例子的方式,从optimization的角度,来说明相对于Mean Square Error,Cross-entropy为什么更常用在分类问题上。

image-20210320205142242

假设现在我们要做一个3个Class的分类

我们现在假设 y 1 y_1 y1的变化是从-10到10, y 2 y_2 y2的变化也是从-10到10, y 3 y_3 y3我们就固定设成-1000,因为 y 3 y_3 y3是一个常量,我们只看 y 1 y_1 y1 y 2 y_2 y2有变化的时候,对我们的Loss有怎样的影响。

左下方的图是使用 Mean square error 情况下画出的Error surface,右下方的图是使用 Cross-entropy 的时候画出来的Error surface:

image-20210320205913652

我们用红色表示Loss大,蓝色表示Loss小,可以看到这两个图都是左上角Loss大,右下角Loss小,因为右下角代表我们的 y 1 y_1 y1接近1,而 y 2 y_2 y2接近0,这与我们的目标label是最接近的。假设我们的训练都是从左上角开始的

image-20210320210341112
  • 如果我们选择 Cross-Entropy,可以看到左上角的地方是有斜率的,所以我们可以通过 Gradient Descent 的方法慢慢往右下的地方走,最终走到Loss很小的地方。
  • 但如果我们选择的是Mean square error的话,很可能刚开始就卡住了,Mean square error 在这种 Loss 很大的地方是非常平坦的,它的gradient非常小,我们可能就没有办法用 Gradient Descentt 顺利的走到右下角。

所以说在 classification 的问题中,更常见的是选择 Cross-Entropy 作为我们的 Loss Function

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值