写在前面
x : input variables/features
y : output variables
我们通过在一堆训练样本中,通过算法,找出一个函数h,使每一个输入样本能够得到我们想要的输出y.
假设一个样本中具有n个特征,则记X=(x1x2⋮xn),对于这n个特征,假设函数关系为h(x)=θ0+θ2x1+...+θnxn,写成矩阵可以表示为:
但是建立的函数和实际的输出总是有差别的,我们把用J(θ)来表示:
其中j表示样本的数量。
我们要做的
我们要通过一种算法使J(θ)达到最小。
把J想象成我们自己,此时我们站在一个山上,要到一个山谷去。我们环顾四周,想找到可以最快去到山谷的方向——很显然,如果我们每一步都像当前最陡的地方走,那么我们很可能最快到达山谷。
what is the direction that would take me downhill as quickly as possible?
假设我们只有一个样本,因为
我们可以很容易的计算出θi=θi−α(hθ(x)−y)∗xi.其中α为学习速率,可以理解为一个人下山时的步长。
当样本量足够多的时候,我们发现每计算一个参数值,就要对m个样本做一次累加,为了避免运算量,我们采用对每个样本进行运算,将运算后的值,再作为初始值,进行下一次运算,在第一次时的初始值由我们自己的指定.
就像是一个人站在山上往下走,如果按照上述的方法,人站在不同的地方就会产生不同的走法。这个最初的位置就像Θ初始值,初始值的选取对结果的影响很大。
用矩阵对它的表示
线性代数
∇θJ=⎡⎣⎢⎢⎢∂J∂θ0⋮∂J∂θn⎤⎦⎥⎥⎥
当A为m*n的矩阵时:
当A为n*n时,则A的迹为A的对角线元素之和。
所以 ∇A=∇trAB=BT
所以∑mj=1(h(X(j))−y)2=(XΘ−y)T(XΘ−y)
在这个是式子里乘以1/2,然后对θ求导,可以得到XTXΘ−XTy将这个式子的值令为0,可以求得
以上
ps:求偏导的符号是\partial,求导的符号是\nabla.