zoukankan      html  css  js  c++  java
  • 逻辑回归与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模型中参数优化的迭代公式中是不一样!其实,如果没有那个求最大值的过程,直接取指数运算就一样的。而加一个求最大值的好处在于避免数据的绝对值过小,数据绝对值太小可能会导致计算一直停留在零而无法进行。就像对数似然函数,似然函数取对数防止概率过小一样。








  • 相关阅读:
    lastz
    Ctrl + c 强制退出
    jobs|ps|杀死nohup
    查询节点qhost
    great vision|be quite honest with you
    golang viper ReadRemoteConfig error
    使用cat和EOF生成 shell 脚本时会自动解析变量的解决办法
    centos install ruby
    golang 性能提升
    查询车系特定口碑信息
  • 原文地址:https://www.cnblogs.com/celerychen/p/3588199.html
Copyright © 2011-2022 走看看