欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于梯度下降算法的矢量化过程

程序员文章站 2022-07-14 19:43:00
...

这几天一直在看Angdrew Ng 的机器学习视频, 里面关于梯度下降(Gradient descent)算法的矢量化(vectorization)过程听得云里雾里的,好在经过后面的编程作业,总算是大致弄清楚了矢量化的过程。

Gradient descent:

θj:=θjα1mi=1m(hθ(x(i))y(i))x(i)j


θ0:=θ0α1mi=1m(hθ(x(i))y(i))x(i)0

θ1:=θ1α1mi=1m(hθ(x(i))y(i))x(i)1

θ2:=θ2α1mi=1m(hθ(x(i))y(i))x(i)2

视频里面说,把θ1,θ2,θ3看成是一个3x1的向量θ,即θ=(θ1,θ2,θ3)T。同时我们也知道α,m,i=1m(hθ(x(i))y(i))都是实数(real number),不好理解的地方就在于
x(i)j它是一个向量,那么在矢量化的时候怎么处理呢?我们先来看例子,手动迭代(iteration)一个。

例题1:

Data setting:

x1 y
2 5
3 7
1 6

Parameter: θ=(θ1,θ2)T=(a,b)
hypothesis: hθ=θ0+θ1x
design matrix: X=

111231

此处暂时或略α,m,因为它们都是实数

因此
θ0:=θ0α1mi=1m(hθ(x(i))y(i))x(i)0=(a+2b5)1+(a+3b7)1+(a+1b6)1
θ1:=θ1α1mi=1m(hθ(x(i))y(i))x(i)1=(a+2b5)2+(a+3b7)3+(a+1b6)1

这样就能通过一次手动计算得到θ1,θ2

下面进行矢量化:

显然,上面算式中的红色部分可以看成是X*θ(设为矩阵A)的结果,而黑色下划线的部分则是(Ay).xj,其中xj表示第j列特征值,比如对于θ1来说,xj=(2,3,1)T。然后再把下划线的部分加起来即可。所以例一矢量化后在Matlab/Octave中的公式为:
θ=θα1m[sum((Xθy).X(:,2));sum((Xθy).X(:,1))]

注:其中X(:,i) 表示矩阵X中的第j列特征值,也就是前面提到的xj

例题2:
这个例题是Andrew Ng 的机器学习视频中,第二周课后练习的part 3部分,下面是答案和结果。

    prediction = X*theta - y; % a m by one matrix
    for i = 1:size(X,2);
        temp_matrix(i) = sum(prediction .* X(:,i));
    end
    theta = theta - alpha * (1/m) * temp_matrix;

关于梯度下降算法的矢量化过程

关于梯度下降算法的矢量化过程