从零开始学习CNN系列——(五)分类问题(Classification)

从零开始学习CNN系列——(五)分类问题(Classification)

    从零开始学习CNN系列,是本人学习李宏毅老师的深度学习课、cs231n及吴恩达老师的深度学习课后总结的适合无基础小白入门深度学习的教程,会跟随本人的炼丹水平不断更改,如有错误,请多加指正。

    此小节主要讲述回归问题(Regression)的姊妹问题——分类问题(Classification),介绍了两种常用的模型——生成式模型(Generative Model)的一种高斯生成模型判别式模型(Discriminative Model) 的一种 Logistic Regression

1、生成式模型(Generative Model)的一种——高斯生成模型

    实在没想出更好的例子来讲解高斯生成模型,暂时就用李老师训练宝可梦的例子吧。我们用以前讲过的机器学习三段论(我命名的hh)来解决如下问题:
    step1提出问题
假设训练集有79只Water系宝可梦和61只Normal系宝可梦,你也不用管它是啥,因为我也不知道,反正就长下面这样。

童年看过《神奇宝贝》的大概都知道,每只宝可梦都有自己的属性如HP(生命值)、Attack(攻击力)、Defense(普通攻击防御力)、SP Defense(特殊攻击防御力)等等,这里为了问题简便,假设只有Defense和SP Defense两个因子影响一只宝可梦属于Water系还是Normal系。现在让你训练出一个模型,这个模型能对类别未知的宝可梦进行识别,判断它属于Water还是Normal系。
    step2建立模型
    step3针对每个函数(function),利用训练集数据计算拟合度,即描述这个选定函数的好坏。
    step4寻找使误差函数最小的函数。

2、判别式模型(Dicriminative Model)的一种——Logistic Regression

    Logistic Regression用李老师ppt中的图总结再好不过了:

其中 $\sigma(z)=\frac{1}{1+e^{-z}}$ ,即常说的Sigmoid function,其形状见下图:

那么应该如何来train这个模型呢?依然使用机器学习三段论。分类问题与回归问题的区别主要是前者输出是离散的,而后者是连续的,且分类问题没法像回归问题那样直接使用L2作为损失函数。所有的机器学习问题都可以理解为黑箱问题,其关键是先找到这个黑箱函数的样式(Function set),让其输出一个值,然后想办法描述输出值与target的差距(Loss Function),最后通过gradient descent等方法找到使这个差距最小的Function。这样不管其模型表面上有无直接意义(即可解释性),其输出按照逻辑来说确实可以预测输入对应的输出。这是最近思考得到的一个总结性想法。Logistic Regression即符合这个思想。
    假设问题是一个二分类问题,有C1和C2两个类别,模型输出为$f_{w,b}(x)$,训练数据如下图。

    step1建立模型(Function Set)
我们需要赋予Logistic Regression的输出一个意义:模型输出定义为属于C1的概率$P_{w,b}(C_1|x)$,且若$P_{w,b}(C_1|x)>=0.5$,归类为C1;否则,归类于C2。我最近在思考该怎么理解直接赋予Logistic Regression输出概率的逻辑是什么?一个可能的想法是这样:首先Logistic Regression本身是一个分类器,其输出$0<=f_{w,b}(x)<=1$,且当$f_{w,b}(x)>=0.5$时,代表输入数据属于C1;否则C2。直觉上来讲,这个定义是不是就相当于把$f_{w,b}(x)$理解为$P_{w,b}(C_1|x)$,即当前数据属于C1的概率了???查了下,网上竟然有人和我有同样的困惑,这说明这确实是个值得讨论的问题,并且好像还可以从数学上证明。。。
    step2针对每个函数(function),利用训练集数据计算拟合度,即描述这个选定函数的好坏。(Loss Function)
根据极大似然法原理,为找出最佳模型,我们需要使找出的模型让当前训练集数据出现的概率最大。
$$
L(w, b)=f_{w, b}\left(x^{1}\right) f_{w, b}\left(x^{2}\right)\left(1-f_{w, b}\left(x^{3}\right)\right) \cdots f_{w, b}\left(x^{N}\right)
$$
$$w^{}, b^{}=\arg \min {w, b}-\ln L(w, b)$$
$$
-\ln L(w, b)=\ln f
{w, b}\left(x^{1}\right)+\ln f_{w, b}\left(x^{2}\right)+\ln \left(1-f_{w, b}\left(x^{3}\right)\right) \cdots
$$
定义 $\widehat{y}^{n}=1$,当归类为C1;$\widehat{y}^{n}=0$,当归类为C2。
$$
-\ln L(w, b)=\sum_{n}-\left[\hat{y}^{n} \ln f_{w, b}\left(x^{n}\right)+\left(1-\hat{y}^{n}\right) \ln \left(1-f_{w, b}\left(x^{n}\right)\right)\right]
$$
这即是常说的二分类问题中的cross entropy,cross_entropy后续会专门写文章介绍,网上找到的比较好的英文文章有两篇:A Gentle Introduction to Cross-Entropy for Machine LearningUnderstand Cross Entropy Loss in Minutes
    step3寻找使误差函数最小的函数。
$$
f_{w, b}(x)=\sigma(z)=1 / 1+\exp (-z)
$$
$$
z=w \cdot x+b=\sum_{i} w_{i} x_{i}+b
$$
$$
\frac{\partial \ln f_{w, b}(x)}{\partial w_{i}}=\frac{\partial \ln f_{w, b}(x)}{\partial z} \frac{\partial z}{\partial w_{i}}
$$
$$
\frac{\partial z}{\partial w_{i}}=x_{i}
$$
$$
\frac{\partial \ln \sigma(z)}{\partial z}=\frac{1}{\sigma(z)} \frac{\partial \sigma(z)}{\partial z}=\frac{1}{\sigma(z)} \sigma(z)(1-\sigma(z))
$$
$$
\frac{\partial \ln \left(1-f_{w, b}(x)\right)}{\partial w_{i}}=\frac{\partial \ln\left(1-f_{w, b}(x)\right)}{\partial z} \frac{\partial z}{\partial w_{i}}
$$
$$
\frac{\partial \ln (1-\sigma(z))}{\partial z}=-\frac{1}{1-\sigma(z)} \frac{\partial \sigma(z)}{\partial z}=-\frac{1}{1-\sigma(z)} \sigma(z)(1-\sigma(z))
$$

$$
\frac{-\ln L(w, b)}{\partial w_{i}}=\sum_{n}-\left(\hat{y}^{n}-f_{w, b}\left(x^{n}\right)\right) x_{i}^{n}
$$

如果真的用L2作为Logistic Regression的损失函数,结果会怎样呢?

3、生成式模型与判别式模型的区别

    参照https://www.cnblogs.com/nolonely/p/6435213.html 的解释:

  • 生成式模型:没有明确的分界线,如高斯生成模型。利用生成模型来解决上述问题,生成模型根据山羊的特征首先学习出一个山羊的模型,然后根据绵羊的特征学习出一个绵羊的模型,然后从这只羊中提取特征,放到山羊模型中看概率是多少,在放到绵羊模型中看概率是多少,哪个大就是哪个。
  • 判别式模型:有明确的分界线,如线性回归模型、logistic regression。用山羊和绵羊的例子来讲,就是要确定一个羊是山羊还是绵羊,用判别模型的方法是从历史数据中学习到模型,然后通过提取这只羊的特征来预测出这只羊是山羊的概率,是绵羊的概率。

    小结

评论


当我沿着一条路走下去的时候,心里总想着另一条路上的事。这种时候,我心里很乱。放声大哭从一个梦境进入另一个梦境,这是每个人都有的奢望。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×