这几天一直在看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;

关于梯度下降算法的矢量化过程_特征值

关于梯度下降算法的矢量化过程_特征值_02