300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 深度学习——线性单元和梯度下降

深度学习——线性单元和梯度下降

时间:2021-05-24 03:08:20

相关推荐

深度学习——线性单元和梯度下降

机器学习的一些基本概念,模型、目标函数、优化算法等等,这些概念对于机器学习算法来说都是通用的套路。

线性单元

当我们面对的数据不是线性可分的时候,感知器规则就无法收敛,为了解决这个问题,我们使用一个可导的线性函数来替代感知器的阶跃函数,这种感知器就叫做线性单元。线性单元在面对线性不可分的数据集的时候,会收敛到一个最佳的近似上。

线性单元将返回一个实数值而不是0,1分类,因此线性单元用来解决回归问题而不是分类问题。

线性模型

模型:实际上就是根据输入x预测输出y的算法。$y=h(x)=w*x_i+b$,$h(x)$函数叫做假设,w和b叫做参数。$x_i$称为特征。

$y=h(x)=\mathrm{w}^T\mathrm{x}\qquad\qquad(式1)$称为线性模型,

监督学习和无监督学习

有监督学习:为了训练一个模型,我们要提供一堆训练样本:每个训练样本既包括输入特征x,也包括对应的输出y(标记),让模型既看到输入特征x,也看到对应标记y。当模型看到足够多的样本之后,它就能总结出其中的一些规律。然后,就可以预测那些它没看过的输入所对应的答案了。

无监督学习:这种方法的训练样本只知道输入特征x,没有输出标记。

梯度下降算法

梯度是一个向量:指向函数上升最快的方向。梯度的反方向就是梯度下降的最快的方向。

梯度下降算法的公式$$\mathrm{x}_{new}=\mathrm{x}_{old}-\eta\nabla{f(x)}$$

其中,$\nabla$是梯度算子,$\nabla{f(x)}$就是指$f(x)$的梯度。$\eta$是步长,也称作学习速率

我们拿线性模型的目标函数来说:$$E(\mathrm{w})=\frac{1}{2}\sum_{i=1}^{n}(\mathrm{y^{(i)}-\bar{y}^{(i)}})^2$$

梯度下降算法可以完成$$\mathrm{w}_{new}=\mathrm{w}_{old}-\eta\nabla{E(\mathrm{w})}$$

如果我们要求目标函数的最大值,我们可以使用梯度上升算法,$$\mathrm{w}_{new}=\mathrm{w}_{old}+\eta\nabla{E(\mathrm{w})}$$

我们通过求$\nabla{E}(\mathrm{w})$带入上式,就能得到线性单元的参数修改规则。

$\nabla{E}(\mathrm{w})$的推导

关于w的偏导数

$$\begin{align}

\nabla{E(\mathrm{w})}&=\frac{\partial}{\partial\mathrm{w}}E(\mathrm{w})\\

&=\frac{\partial}{\partial\mathrm{w}}\frac{1}{2}\sum_{i=1}^{n}(y^{(i)}-\bar{y}^{(i)})^2\\

&=\frac{1}{2}\sum_{i=1}^{n}\frac{\partial}{\partial\mathrm{w}}(y^{(i)}-\bar{y}^{(i)})^2\\

\end{align}$$

$$\begin{align}

&\frac{\partial}{\partial\mathrm{w}}(y^{(i)}-\bar{y}^{(i)})^2\\

=&\frac{\partial}{\partial\mathrm{w}}(y^{(i)2}-2\bar{y}^{(i)}y^{(i)}+\bar{y}^{(i)2})\\

\end{align}$$

$y$是与$w$无关的参数,而$\bar{y}=\mathrm{w}^T\mathrm{x}$,下面我们用复合函数求导法

$$\frac{\partial{E(\mathrm{w})}}{\partial\mathrm{w}}=\frac{\partial{E(\bar{y})}}{\partial\bar{y}}\frac{\partial{\bar{y}}}{\partial\mathrm{w}}$$

分别计算上式等号右边的两个偏导数

$$\begin{align}

\frac{\partial{E(\mathrm{w})}}{\partial\bar{y}}=

&\frac{\partial}{\partial\bar{y}}(y^{(i)2}-2\bar{y}^{(i)}y^{(i)}+\bar{y}^{(i)2})\\

=&-2y^{(i)}+2\bar{y}^{(i)}\\\\

\frac{\partial{\bar{y}}}{\partial\mathrm{w}}=

&\frac{\partial}{\partial\mathrm{w}}\mathrm{w}^T\mathrm{x}\\

=&\mathrm{x}

\end{align}$$

代入,我们求得$\sum$里面的偏导数是

$$\begin{align}

&\frac{\partial}{\partial\mathrm{w}}(y^{(i)}-\bar{y}^{(i)})^2\\

=&2(-y^{(i)}+\bar{y}^{(i)})\mathrm{x}

\end{align}$$

最后代入$\nabla{E}(\mathrm{w})$,求得

$$\begin{align}

\nabla{E(\mathrm{w})}&=\frac{1}{2}\sum_{i=1}^{n}\frac{\partial}{\partial\mathrm{w}}(y^{(i)}-\bar{y}^{(i)})^2\\

&=\frac{1}{2}\sum_{i=1}^{n}2(-y^{(i)}+\bar{y}^{(i)})\mathrm{x}\\

&=-\sum_{i=1}^{n}(y^{(i)}-\bar{y}^{(i)})\mathrm{x}

\end{align}$$

经过推导,目标函数$E(w)$的梯度是$$\nabla{E(\mathrm{w})}=-\sum_{i=1}^{n}(y^{(i)}-\bar{y}^{(i)})\mathrm{x}^{(i)}$$

所以线性单元的参数修改规则最后是这个样子

$$\nabla{E(\mathrm{w})}=-\sum_{i=1}^{n}(y^{(i)}-\bar{y}^{(i)})\mathrm{x}^{(i)}$$

有了上面的式子,我们就能写出训练线性单元的代码

$$\begin{bmatrix}

w_0 \\

w_1 \\

w_2 \\

... \\

w_m \\

\end{bmatrix}_{new}=

\begin{bmatrix}

w_0 \\

w_1 \\

w_2 \\

... \\

w_m \\

\end{bmatrix}_{old}+\eta\sum_{i=1}^{n}(y^{(i)}-\bar{y}^{(i)})

\begin{bmatrix}

1 \\

x_1^{(i)} \\

x_2^{(i)} \\

... \\

x_m^{(i)} \\

\end{bmatrix}$$

随机梯度下降算法(Stochastic Gradient Descent,SGD)

如果我们每次更新w的迭代,要遍历训练数据中所有的样本进行计算,我们称这种算法叫做批梯度下降(Batch Gradient Descent),如果我们数据样本非常大达到了上百万亿,就需要用SGD算法,在SGD算法中,每次更新w的迭代,只计算一个样本,这样对于一个具有数百万样本的训练数据,完成一次遍历就会对更新数百万次,效率大大提升。由于样本的噪音和随机性,每次更新$w$并不一定按照$E$减少的方向。然而,虽然存在一定随机性,大量的更新总体上沿着$E$减少的方向前进的,因此最后也能收敛到最小值附近。

$\mathrm{w}_{new}=\mathrm{w}_{old}+\eta\sum_{i=1}^{n}(y^{(i)}-\bar{y}^{(i)})\mathrm{x}^{(i)}\qquad\qquad(式3)$

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。