逻辑回归与softmax回归

深度神经网路已经在语音识别,图像识别等领域取得前所未有的成功。本人在多年之前也曾接触过神经网络。本系列文章主要记录自己对深度神经网络的一些学习心得。


第四篇,谈谈我对逻辑回归和softmax回归的一点理解。网络上对逻辑回归和softmax回归论述也很多,包括各种不同语言的代码,都可以下载到。


1.  逻辑回归源于线性回归模型。

     线性回归问题的自变量是连续变量,而逻辑回归问题的自变量一般是取值为离散的名义变量,例如,男,女。逻辑回归是对因变量和自变量之前发生关系的概率解释。例如,某种疾病的发生与抽烟的关系,这种关系可以解释为抽烟会导致这种疾病发生的概率值。当逻辑回归用于分类的时候,分类器的阈值点就是0.5。


2. 优化算法

    回归问题是统计学里面最基础的问题。在统计学里面,一般采用最大似然和最小二乘法直接导出解析解。具体可以参考任何一般统计学的教材。其解析解里面有一个矩阵的逆。求逆和伪逆运算有一些快速算法可以利用。所以对于数据量小的回归问题,直接用解析解就可以快速的得到模型的参数。而对于数据挖掘,海量数据导致内存的开销巨大,这时候直接求解析解是不现实的。于是,在机器学习相关的教程里面,对于回归问题,描述的都是迭代算法。基于随机梯度下降的迭代算法的好处是,内存开销小。


3. 对开源softmax回归的一点解释

   对深度学习的开源代码中有一段softmax的代码,下载链接如下:

   https://github.com/yusugomori/DeepLearning

   这个开源的代码是实现了深度网络的常见算法,包括c,c++,java,python等不同语言的版本。


  softmax回归中有这样一段代码:

   void LogisticRegression_softmax(LogisticRegression *this, double *x) {
  int i;
  double max = 0.0;
  double sum = 0.0;


  for(i=0; i<this->n_out; i++) if(max < x[i]) max = x[i];
  for(i=0; i<this->n_out; i++) {
    x[i] = exp(x[i] - max);
    sum += x[i];
  }

  for(i=0; i<this->n_out; i++) x[i] /= sum;
}


乍一看这段代码,发现它和文献中对softmax模型中参数优化的迭代公式中是不一样!其实,如果没有那个求最大值的过程,直接取指数运算就一样的。而加一个求最大值的好处在于避免数据的绝对值过小,数据绝对值太小可能会导致计算一直停留在零而无法进行。就像对数似然函数,似然函数取对数防止概率过小一样。








posted @ 2013-06-03 17:15  celerychen  阅读(1646)  评论(0编辑  收藏  举报