我们再来复习一下上一篇文章中学到的。和其他机器学习算法类似,我们首先有一个假设方程:
\hat{y}=sigmoid(\mathbf{w}^\mathrm{T}x+b)
然后对于每一个训练样例,我们定义它的Loss Function:
L(\hat{y},y)=-(y\log{\hat{y}}+(1-y)\log(1-\hat{y}))
然后对于整个训练样本集合,我们定义了Cost Function:
J(w,b)=\frac{1}{m}\sum_{i=1}^{m}L({\hat{y}}^{(i)},{y}^{(i)})

结合上一篇文章说到的人像识别例子,我们来说一下每个function的意图。对于假设方程,我们是认为每一个feature(像素点0/1)对于最终识别这个图片是否是人像都有一个权重值{w}^{(i)},那么所有feature的值乘以自己对应的权重值再加上一个常数b,通过simgmoid函数转化,就变成了一个0-1之间的数。这个数表示这幅图片是一个人像的概率\hat{y},这个值是预测出来的,肯定和我们之前打的lable有区别。这个区别怎么衡量呢,我们引入了Loss Function来表示对单个训练样本预测的误差。然后我们用Cost Function来表示对所有训练样本的误差。而且在带入了lable值和feature值之后,Cost Function就只剩下w和b这个假设函数中未知的参数了。那么只要能让整个训练样本误差最小的w,b构成的假设函数就是我们最终的模型。

我们知道w是一个向量,为了讲述方便,我们先把w看成一个数值。为了得到J(w,b)的最小值,有很多种办法,比如你可以找对w,b求导为0的点,或者牛顿法,还有就是梯度下降。最终发现还是梯度下降计算复杂度低,更适合计算机运算。

导数

你可以简单的把导数理解为函数在某一点的斜率。对于y=x这个函数来说,不论x取值多少,斜率都是固定的1.但是对于y=x^2,在x取不同值的点上,斜率就不一样,所以它的导数是一个依赖于x的函数,确切的值是\frac{\mathrm{d} y}{\mathrm{d} x}=2x

可以看到对于y=x这个曲线,图上三个点的坡度是一样的,而对于y=x^2,它的坡度是随着x的增大而增大的。

偏导数

上边看到的是对于只有一个自变量的情况,对于两个自变量(w,b)的情况下,我们在计算某一个自变量比如w的导数时,可以认为b不变,这时求得的导数叫做偏导数。\frac{\partial J}{\partial w},\frac{\partial J}{\partial b}

梯度

梯度就是把一个函数的各个自变量组成一个向量,就像这样:
\bigl(\begin{smallmatrix}\frac{\partial J}{\partial w},\frac{\partial J}{\partial b} & \end{smallmatrix}\bigr)
沿着这个向量的方向函数值增加最快,而逆着这个方向,函数值减小最快。

梯度下降

对于J(w,b)=\frac{1}{m}\sum_{i=1}^{m}L({\hat{y}}^{(i)},{y}^{(i)}),我们就是为了找到J(w,b)最小值时的w,b,我们首先求出梯度,随机设置w,b的初始值,然后让函数多次小步沿着梯度反方向前进,直到J(w,b)不再减小时,所处位置的w,b值就是我们要寻找的值。
关于梯度下降的一个直观的例子是,把你随机空投到一个山上,你需要最快速度的到达谷底。你所选的方向一定是按照梯度的反方向前进,每次一小步,随时调整自己的位置。就像下图所示:

关于导数,偏导数的定义我讲的不是很规范,但是对于你的理解可能已经足够,如果你还是不理解或者你自己感兴趣,可以去查一下更精确的定义。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

%d 博主赞过: