1.梯度的理解
在机器学习过程中,经常使用梯度下降方法求解损失函数的最小值。梯度的值为函数在某一点,沿着各向量方向的偏导数。沿着梯度相反的方向,函数减小最快,更容易找到函数的最小值。
2.梯度下降法的矩阵表示
函数的表达式为$h_ heta(X)=X heta$,损失函数的表达式为$J( heta)=sum_{i=1}^m(h_ heta(x_i)-y_i)^2$,其矩阵表达式为$J( heta)=frac{1}{2}(X heta-Y)^T(X heta-Y)$,损失函数对于$ heta$向量的偏导数为$frac{partial}{partial heta}J( heta)=X^T(X heta-Y)$。
3.权重计算:使用全部样本、使用部分样本
全部样本算权重
1 h = sigmoid(dataMatrix * weights) 2 error = labelMat - h 3 weight = weight + alpah * error * dataMatrix.transpose()
一个样本算权重
1 h = sigmoid(sum(dataMatrix[i] * weights)) 2 error = classLabel[i] - h 3 weight = weight + alpha * error * dataMatrix[i]
h是sigmoid函数的值,error是算出来的值与label之间的误差,然后使用alpha系数、误差、输入更新权重的值。
此方法没有使用梯度的计算值,而是使用alpha、error、输入值,更新权重。
4.数值梯度与解析梯度
理论推导使用解析梯度,在工程计算中,常使用数值梯度进行计算。
5.梯度下降的代数方式描述
5.1损失函数
假设函数表示为$h_ heta(x_1,x_2,...,x_n)= heta_0+ heta_1 x_1+...+ heta_n x_n$,其中$ heta_i(i=0,1,2,...,n)$为模型参数,$x_i(i=0,1,2,...,n)$为每个样本的n个特征值。这里增加一个特征$x_0 = 1$,即可表示为$h_ heta(x_0,x_1,...,x_n)=sum_{i=0}^m heta_ix_i$,对于上面的函数,损失函数如下。
$$J( heta_0, heta_1,..., heta_n)=frac{1}{2m}sum_{j=0}^m(h_ heta(x_0^{(j)},x_1^{(j)},...,x_n^{(j)})-y_i)^2$$
5.2相关参数
主要参数为$ heta_0, heta_1,..., heta_n$,算法终止距离$epsilon$以及步长$alpha$。
5.3算法过程
1)确定梯度
确定当前位置的损失函数的梯度,对于$ heta_i$,其梯度表达式为$frac{partial}{partial heta_i}J( heta_0, heta_1,..., heta_n)$
2)步长乘以梯度
用步长乘以损失函数的梯度,得到当前位置下降的距离,即
$alphafrac{partial}{partial heta_i}J( heta_0, heta_1,..., heta_n)$,为梯度下降中的关键一步。
3)检查终止条件
确定是否所有$ heta_i$梯度下降的距离都小于$epsilon$,如果小于$epsilon$则算法终止,当前所有$ heta_i(i=0,1,...,n)$即为最张结果,否则进行第4步。
4)更新参数
更新所有$ heta$,对于$ heta_i$,其更新方式为$ heta_i= heta_i-alphafrac{partial}{partial heta_i}J( heta_0, heta_1,..., heta_n)$