1、Model representation(模型表达)
模型表达就是给出输入和输出之间的函数关系式。当然这个函数是由前提假设的,里面可以含有参数。此时如果有许多训练样本的话,同样可以给出训练样本的平均相关的误差函数,也称作损失函数(Loss function)。我们的目标是求出模型表达中的参数,这是通过最小化损失函数来求得的。一般最小化损失函数是通过梯度下降法(即先随机给出参数的一组值,然后更新参数,使每次更新后的结构都能够让损失函数变小,最终达到最小即可)。在梯度下降法中,目标函数其实可以看做是参数的函数,因为给出了样本输入和输出值后,目标函数就只剩下参数部分了,这时可以把参数看做是自变量,则目标函数就变成了参数的函数了。梯度下降每次都是更新每个参数,且每个参数更新的形式是一样的,即用前一次该参数的值减掉学习率和目标函数对该参数的偏导数。(如果只有1个参数的话,就是导数),为什么要这样做呢?通过取不同点处的参数可以看出,这样做恰好可以使原来的目标函数值变低,因此符合我们的要求(即求函数的最小值)。即使当学习速率固定(但不能太大),梯度下降法也是可以收敛到一个局部最小点的,因为梯度值会越来越小,它和固定的学习率相乘后的积也会越来越小。在线性回归问题中我们就可以用梯度下降法来求回归方程中的参数。有时候该方法也称为批量梯度下降法,这里的批量指的是每一时候参数的更新使用到了所有的训练样本。
2、Vectorized implementation(矢量实现)
由于实际问题中很多变量都是向量的,所有如果要把每个分量都写出来的话会很不方便,应该尽量写成矢量的形式(就是把原来的一个变量一个公式写成了一个向量一个公式,把变量换成了向量)。比如上面的梯度下降法的参数更新公式其实也是可以用矢量形式实现的。矢量形式的公式简单,且易用matlab编程。由于梯度下降法是按照梯度方向来收敛到极值的,如果输入样本各个维数的尺寸不同(即范围不同),则这些参数的构成的等高线不同的方向胖瘦不同,这样会导致参数的极值收敛速度极慢。(我不知道为什么会导致参数的极值收敛粗度慢的原因,但是你想这时候把变量换成了向量,所以向量中所有的变量都对应同一个学习速率,那么如果你输入样本的尺度不一样,有的平均值几百多,有的只有零点几,同一个学习参数对于不同的变量学习速度的快慢是大大不一样的,所以才要把他们的每个维度都进行尺度变化)因此在进行梯度下降法求参数前,需要先进行feature scaling这一项,一般都是把样本中的各维变成0均值,即先减掉该维的均值,然后除以该变量的range(就个就应该是每个维度下样本的标准差)。
3、Feature scaling
接下来就是学习率对梯度下降法的影响。如果学习速率过大,这每次迭代就有可能出现超调的现象,会在极值点两侧不断发散(为什么会不断发散哪,学习以后,参数应该会向cost function函数的局部凹的地方移动啊,如果我们学习的速率比较大,那么肯定会越过局部的最低点,但是越过以后不还会回落到最低点吗,为什么会越来越大,这个不是很明白),最终损失函数的值是越变越大,而不是越来越小。在损失函数值——迭代次数的曲线图(就是每迭代一次以后得到的cost function值形成的图)中,可以看到,该曲线是向上递增的。当然了,当学习速率过大时,还可能出现该曲线不断震荡的情形。(这个容易理解,你的学习速率太大啦,你这次迭代可能出现在凸出,下次又出现在凹处,就是因为学习速率太大,不能一点点的平滑的滑落到凹处造成的)如果这该学习速率太小,曲线下降得很慢,甚至在很多次迭代处曲线值保持不变。那到底该选什么值呢?这个一般是根据经验来选取的,比如从…0.0001,0.001,.0.01,0.1,1.0…这些参数中选,看哪个参数使得损失值和迭代次数之间的函数曲线下降速度最快。
4、Normal equations
同一个问题可以选用不同的特征和不同的模型,特征方面,比如单个面积特征其实是可以写成长和宽2个特征的。不同模型方面,比如在使用多项式拟合模型时,可以指定x的指数项最多到多少。当用训练样本来进行数据的测试时,一般都会将所有的训练数据整理成一个矩阵,矩阵的每一行就是一个训练样本(如果想用下面那个公式,x矩阵每一行就是一个训练样本,而不能是列),这样的矩阵有时候也会叫做是“design matrix”。当用矩阵的形式来解多项式模型的参数时,参数w=inv(X’*X)*X’*y(这个是在matlab的形式),这个方程也称为normal equations. (这个就是最小化误差平方也可以说最小二乘法得到的回归方程的参数的公式)虽然X’*X是方阵,但是它的逆不一定存在(当一个方阵的逆矩阵不存在时,该方阵也称为sigular)。比如说当X是单个元素0时,它的倒数不存在,这就是个Sigular矩阵,当然了这个例子太特殊了。另一个比较常见的例子就是参数的个数比训练样本的个数还要多时也是非可逆矩阵。这时候要求解的话就需要引入regularization项,或者去掉一些特征项(典型的就是降维,去掉那些相关性强的特征)。另外,对线性回归中的normal equations方程求解前,不需要对输入样本的特征进行feature scale。
来源:CSDN
作者:blank307
链接:https://blog.csdn.net/sinat_27310443/article/details/104595489