一 、机器学习基础知识(转载)

一直寻思着要系统地学一下Deep Learning,在网上搜了不少,建议路线先看UFLDL教程,Andrew NG执笔,很好,后面的exercise要做(建议配合大神们的博客一起看,我是参考tornadomeet的博客来看的),然后再去看李飞飞的cs231n,后面的作业也一定要做;放出链接:

UFLDL教程:http://deeplearning.stanford.edu/wiki/index.php/UFLDL%E6%95%99%E7%A8%8B

参考博客:http://www.cnblogs.com/tornadomeet/tag/Deep%20Learning/default.html?page=3

CS231链接:http://vision.stanford.edu/teaching/cs231n/syllabus.html

然后开始吧~

1.由于梯度下降法是按照梯度方向来收敛到极值的,如果输入样本各个维数的尺寸不同(即范围不同),则这些参数的构成的等高线不同的方向胖瘦不同,这样会导致参数的极值收敛速度极慢。因此在进行梯度下降法求参数前,需要先进行feature scaling这一项,一般都是把样本中的各维变成0均值,即先减掉该维的均值,然后除以该变量的range。然后这里首先说一下两种操作:归一化操作和标准化操作。(1)归一化操作:即将数据限制在你所需要的一定范围内,一般限制在[0 , 1] 之间,这样会使数据处理更加便携快速,同时它能够把量纲表达式变为无量纲表达式,一般方法是(x-min(x))/(max(x)-min(x)) ; (2)标准化操作,对原始数据进行缩放处理,使其限制在一定的范围内,一般指正态化,均值为0,方差为1,即使数据不符合正态化分布也可以使用这种方法。标准化的数据有正有负,一般方法是[x-mean(x)]/std(x),其中std(x)是求x的标准差;由上可发现feature scaling貌似是结合了这两种操作,不过我看了Andrew Ng的视频。我认为实际使用是有很多变种,放出链接:http://www.cnblogs.com/zf-blog/p/6155216.html;

2.同一个问题可以选用不同的特征和不同的模型,特征方面,比如单个面积特征其实是可以写成长和宽2个特征的。不同模型方面,比如在使用多项式拟合模型时,可以指定x的指数项最多到多少。当用训练样本来进行数据的测试时,一般都会将所有的训练数据整理成一个矩阵,矩阵的每一行就是一个训练样本,这样的矩阵有时候也会叫做是“design matrix”。当用矩阵的形式来解多项式模型的参数时,参数w=inv(X’*X)*X’*y,这个方程也称为normal equations(笔记本上有证明). 虽然X’*X是方阵,但是它的逆不一定存在(当一个方阵的逆矩阵不存在时,该方阵也称为sigular)。比如说当X是单个元素0时,它的倒数不存在,这就是个Sigular矩阵,当然了这个例子太特殊了。另一个比较常见的例子就是参数的个数比训练样本的个数还要多时也是非可逆矩阵。这时候要求解的话就需要引入regularization项,或者去掉一些特征项(典型的就是降维,去掉那些相关性强的特征)。另外,对线性回归中的normal equations方程求解前,不需要对输入样本的特征进行feature scale(这个是有理论依据的)。

3.上面讲的函数一般都是回归方面的,也就是说预测值是连续的,如果我们需要预测的值只有2种,要么是要么不是,即预测值要么是0要么是1,那么就是分类问题了。这样我们需要有一个函数将原本的预测值映射到0到1之间,通常这个函数就是logistic function,或者叫做sigmoid function。因为这种函数值还是个连续的值,所以对logistic函数的解释就是在给定x的值下输出y值为1的概率。

Convex函数其实指的是只有一个极值点的函数,而non-convex可能有多个极值点。一般情况下我们都希望损失函数的形式是convex的。在分类问题情况下,先考虑训练样本中值为1的那些样本集,这时候我的损失函数要求我们当预测值为1时,损失函数值最小(为0),当预测值为0时,此时损失函数的值最大,为无穷大,所以这种情况下一般采用的是-log(h(x)),刚好满足要求。同理,当训练样本值为0时,一般采用的损失函数是-log(1-h(x)).因此将这两种整合在一起时就为-y*log(h(x))-(1-y)*log(1-h(x)),结果是和上面的一样,不过表达式更紧凑了,选这样形式的loss函数是通过最大释然估计(MLE)求得的。这种情况下依旧可以使用梯度下降法来求解参数的最优值。在求参数的迭代公式时,同样需要求损失函数的偏导,很奇怪的时,这时候的偏导函数和多元线性回归时的偏导函数结构类似,只是其中的预测函数一个是普通的线性函数,一个是线性函数和sigmoid的复合的函数。

4.梯度下降法是用来求函数值最小处的参数值,而牛顿法是用来求函数值为0处的参数值,这两者的目的初看是感觉有所不同,但是再仔细观察下牛顿法是求函数值为0时的情况,如果此时的函数是某个函数A的导数,则牛顿法也算是求函数A的最小值(当然也有可能是最大值)了,因此这两者方法目的还是具有相同性的。牛顿法的参数求解也可以用矢量的形式表示,表达式中有hession矩阵和一元导函数向量。

  下面来比较梯度法和牛顿法,首先的不同之处在于梯度法中需要选择学习速率,而牛顿法不需要选择任何参数。第二个不同之处在于梯度法需要大量的迭代次数才能找到最小值,而牛顿法只需要少量的次数便可完成。但是梯度法中的每一次迭代的代价要小,其复杂度为O(n),而牛顿法的每一次迭代的代价要大,为O(n^3)。因此当特征的数量n比较小时适合选择牛顿法,当特征数n比较大时,最好选梯度法。这里的大小以n等于1000为界来计算。

5.如果当系统的输入特征有多个,而系统的训练样本比较少时,这样就很容易造成over-fitting的问题。这种情况下要么通过降维方法来减小特征的个数(也可以通过模型选择的方法),要么通过regularization的方法,通常情况下通过regularization方法在特征数很多的情况下是最有效,但是要求这些特征都只对最终的结果预测起少部分作用。因为规则项可以作用在参数上,让最终的参数很小,当所有参数都很小的情况下,这些假设就是简单假设,从而能够很好的解决over-fitting的问题。一般对参数进行regularization时,前面都有一个惩罚系数,这个系数称为regularization parameter,如果这个规则项系数太大的话,有可能导致系统所有的参数最终都很接近0,所有会出现欠拟合的现象。在多元线性回归中,规则项一般惩罚的是参数1到n(当然有的也可以将参数0加入惩罚项,但不常见)。随着训练样本的增加,这些规则项的作用在慢慢减小,因此学习到的系统的参数倾向而慢慢增加。规则项还有很多种形式,有的规则项不会包含特征的个数,如L2-norm regularization(或者叫做2-norm regularization).当然了,还有L1-norm regularization。由于规则项的形式有很多种,所以这种情形也称为规则项的common variations.

6.在有规则项的线性回归问题求解中,如果采用梯度下降法,则参数的更新公式类似(其中参数0的公式是一样的,因为规则项中没有惩罚参数0),不同之处在于其它参数的更新公式中的更新不是用本身的参数去减掉后面一串,而是用本身参数乘以(1-alpha*lamda/m)再减掉其它的,当然了这个数在很多情况下和1是相等的,也就很前面的无规则项的梯度下降法类似了。它的normal equation也很前面的类似,大致为inv(X’*X+lamda*A)*X’*y,多了一项,其中A是一个对角矩阵,除了第一个元素为0外,其它元素都为1(在通用规则项下的情形)。这种情况下前面的矩阵一般就是可逆的了,即在样本数量小于特征数量的情况下是可解的。当为logistic回归的情况中(此时的loss函数中含有对数项),如果使用梯度下降法,则参数的更新方程中也和线性回归中的类似,也是要乘以(1-alpha*lamda/m),nomal equation中也是多了一个矩阵,这样同理就解决了不可逆问题。在牛顿法的求解过程中,加了规则项后的一元导向量都随着改变,hession矩阵也要在最后加入lamda/m*A矩阵,其中A和前面的一样。

7.logistic回归与多充线性回归实际上有很多相同之处,最大的区别就在于他们的因变量不同,其他的基本都差不多,正是因为如此,这两种回归可以归于同一个家族,即广义线性模型(generalized linear model)。这一家族中的模型形式基本上都差不多,不同的就是因变量不同,如果是连续的,就是多重线性回归,如果是二项分布,就是logistic回归,如果是poisson分布,就是poisson回归,如果是负二项分布,就是负二项回归,等等。只要注意区分它们的因变量就可以了。logistic回归的因变量可以是二分类的,也可以是多分类的,但是二分类的更为常用,也更加容易解释。所以实际中最为常用的就是二分类的logistic回归。

原文地址:https://www.cnblogs.com/zf-blog/p/6593787.html