线性回归、代价函数和梯度下降法
线性回归预测函数:
h_{\theta}(x)=\theta^{T}x
逻辑回归预测函数:
h_{\theta}^{(x)}=\frac{1}{1+e^{-\theta^{T}x}}
线性回归损失函数:
J(\theta)=\frac{1}{2m}\sum_{i=1}^m(h(\theta^{(i)}-y^i))^2+\frac{\lambda}{2m}\sum_{j=1}^m\theta_j^2
逻辑回归损失函数:
如果直接使用线性回归的MSE会让逻辑回归的代价函数变成非凸函数,这样就会导致有非常多的局部最优值,导致梯度下降法失效。所以引入了交叉熵损失函数来替代线性回归的MSE(均方误差)
J(\theta)=-\frac{1}{2m}\sum_{i=1}^m(y^ilog{h_\theta(x^i)}+(1-y^i)log(1-h_\theta x^{(i)})^2+\frac{\lambda}{2m}\sum_{j=1}^m\theta_j^2
两者损失函数求导后,除了假设函数不一样,表示形式是一样的:

损失函数中参数倍数变化并不会影响最优值的最终结果
两个变量:y=wx+b
多个变量:假设函数(hypothesis):h_\theta(x)=\theta^Tx=\theta_0x_0+\theta_1x_1+\theta_2x_2+…+\theta_nx_n

根据x的不同系数w得损失曲线,根据最小的loss值得到对应系数w


步长(学习率\alpha)决定了梯度下降的速度,梯度会下降到直至收敛convergence(也就是到局部最小值才停止),所以太大的步长会导致在坡底(局部最小值)震荡
初始化起点也能影响梯度下降的速度和得到的局部最小值(局部最小值可能有很多个,初始化下降起点(也就是w和b)会影响局部最小值)。一般情况下,设置初始化w, b = 0, 0

梯度下降公式:\theta_j=\theta_j-\alpha\frac{\partial{J(\theta_0,\theta_1)}}{\partial_{\theta_j}}\space\space\space(for j = 0 \space and \space j = 1)

正确的梯度更新应该是多个参数同步更新(先获取下降梯度再更新参数),否则会影响在其他参数的更新,最终影响结果
如果刚好初始化值为局部最小值,则代价函数J_\theta的值为0
梯度下降时,学习率\alpha不需要变更,因为在梯度下降的过程中,代价函数的梯度\partial_{J}会随着慢慢下降而减小,所以梯度下降的速度也会减缓

线性回归的代价函数求导后得到(二元梯度下降):
其中\theta_{0}为常数

MSE梯度下降公式:

多元梯度下降:


凸函数没有局部最优,只有一个全局最优,像这种函数,只要使用线性回归总是能收敛到全局最优
考虑全局的一种方法,在线性回归中使用的MSE即均方差即是考虑了所有数据的一种BGD
==归一化可以加快梯度下降的速度,也就是更快地收敛==

x=\frac{x-\mu}{x_{max}-x_{min}}
如何能够快速判断梯度下降是否正在有效工作/收敛呢?
正确的学习率:

错误的学习率:

方法1:(推荐)运行过程中,根据迭代次数和代价函数的值/导数(下降速度)来判断梯度是否有效下降/收敛,也就是上述绘制曲线,通过看曲线的方式
方法2:设定一个阈值,当代价函数变化值小于该阈值则停止训练。但是该方式的缺点是通常这个阈值不好选择
设置较小的学习率总能收敛,但是速度会偏慢,通过观察运行时的曲线选择合适的学习率

在选择特征时,可能有多个角度:如在房价预测时,你可以通过房子的纵深和宽度来计算影响因子,也可以通过面积来直接计算;根据模型/数据实际的效果来选择最合适的即可。
多项式拟合:

有时候我们能使用线性拟合的方式来得到多项式拟合的效果,如


\theta=(X^{T}X)^{-1}X^{T}y该公式计算结果可以直接求得代价函数最小化的\theta,也就是算得其中一个参数系数的最优解
在使用了Norm Equation正规方程后,数据可以不用归一化处理,直接计算即可
在Octave/Matlab中使用pinv(伪逆)/inv可以计算得到矩阵的逆,矩阵在一定条件下是不可逆的(矩阵的值为0,也就是某些特征之间存在线性关系,说明部分特征是多余的;样本太少,特征太多,适当减少特征或者使用正则化),但是使用pinv仍然可以得到该矩阵的逆

\ | 梯度下降法Gradient Desent | 正规方程Norm Equation |
|---|---|---|
缺点 | 1.需要设置学习率$\alpha$ 2.需要迭代升级 | 当参数比较大时,计算$\theta=(X^{T}X)^{-1}X^{T}y$的时间成本为$O(n^{3})$,但参数个数较小(10k以下?)时,速度会较梯度下降法快;对于一些复杂的学习算法,我们不得不使用梯度下降法来替代正规方程 |
优点 | 当参数非常大时依然能非常好地工作;在一些复杂算法中仍然适用,而正规方程只使用于特定的一些算法中,如线性回归等 | 不需要设置学习率$\alpha$;不需要迭代 |
自适应优化算法(如momentum-SGD、NAG、Adagrad、Adadelta、RMSprop)训练出来的结果通常都不如SGD,尽管这些自适应优化算法在训练时表现的看起来更好。 使用者应当慎重使用自适应优化算法。