IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    从函数近似角度看softmax

    diaorui发表于 2013-04-01 11:39:51
    love 0

    我不懂softmax,但是最近好友licstar在做这方面的实验,我就了解了一点点。
    我用自己的理解复述一遍。
    问题大概是针对分类的,有多个$m$维观测向量且我们知道他们的类别。样本个数记为$C$,类别数量记为$n$。
    现在我们构造一个线性分类器,它包括了一个$n$行$m$列的矩阵$A$,将矩阵左乘观测向量$x$,就得到某个向量$b$,这个向量各个数中最大的一个设为$b_i$,则观测向量就是第$i$类的。

    从维基百科就能看到这个问题的目标函数,貌似是和概率有关,我概率学得一般,但是发现可以从函数近似的角度去看。也许很多人已经这么做了,毕竟我不了解这个模型。
    我们实际上有个很直观的目标是: minimize $ sgn(\max_j b_j – b_i) $
    其中$sgn(\cdot)$是符号函数,也即当$t$为正时$sgn(t)=1$,当$t$为负时$sgn(t)=-1$,当$t=0$时$sgn(t)=0$。也即$b_i=\max_j b_j$的时候,目标函数取$0$,否则取$1$,含义就是有多少个被分类错误了。然后我们求这个函数的极小值。
    但是这个目标明显非常难算,不连续更不可导。
    首先我们替换掉$\max $,它的一个常用光滑近似函数是 $\max_j b_j \approx \mu \ln \sum_j exp(b_j / \mu )$ ,在参数$\mu$很小的时候,他们近似相等,但是参数太小函数会性质不好。这是一个凸近似。
    然后需要再来近似符号函数$sgn$,近似他的办法有很多种,为了得到凸近似,考虑到复合函数为凸的一个必要条件(不是充分条件):若$f$和$g$都是凸函数,且$f$递增,则有$f(g(x))$是凸函数。所以我们需要找一个凸的,递增的函数来近似$sgn$,并且最主要是在零点处接近$sgn$,这还真不是太好找,这个函数需要在零点从负突然上升到正,而且要凸。如果不要求是凸的话倒是很好找。
    一个简单的近似就是线性函数$f(u)=u / \mu $ 当$\mu$很小的时候,他在零点附近和符号函数接近,而且线性函数也是特殊的凸函数。

    综上,目标就变成了 minimize $ \ln \sum_j exp(b_j / \mu ) – b_i / \mu $
    化简一下,上式中目标函数
    $ = \ln \sum_j exp(b_j / \mu ) – \ln exp(b_i / \mu) $
    $ = \ln (\sum_j exp(b_j / \mu ) / exp(b_i / \mu)) $
    也即等价于 maximize $ \ln (exp(b_i / \mu) / (\sum_j exp(b_j / \mu ))) $
    这看上去就和维基百科上给出的目标函数一致了。



沪ICP备19023445号-2号
友情链接