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

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

线性单元

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

  线性单元将返回一个实数值而不是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)$

原文地址:https://www.cnblogs.com/LXP-Never/p/9785547.html

时间: 2024-11-03 22:00:27

深度学习——线性单元和梯度下降的相关文章

(2)Deep Learning之线性单元和梯度下降

往期回顾 在上一篇文章中,我们已经学会了编写一个简单的感知器,并用它来实现一个线性分类器.你应该还记得用来训练感知器的『感知器规则』.然而,我们并没有关心这个规则是怎么得到的.本文通过介绍另外一种『感知器』,也就是『线性单元』,来说明关于机器学习一些基本的概念,比如模型.目标函数.优化算法等等.这些概念对于所有的机器学习算法来说都是通用的,掌握了这些概念,就掌握了机器学习的基本套路. 线性单元是什么? 感知器有一个问题,当面对的数据集不是线性可分的时候,『感知器规则』可能无法收敛,这意味着我们永

深度学习解决局部极值和梯度消失问题方法简析(转载)

转载:http://blog.sina.com.cn/s/blog_15f0112800102wojj.html 这篇文章关于对深度CNN中BP梯度消失的问题的做了不错的解析,可以看一下: 多层感知机解决了之前无法模拟异或逻辑的缺陷,同时更多的层数也让网络更能够刻画现实世界中的复杂情形.理论上而言,参数越多的模型复杂度越高,“容量”也就越大,也就意味着它能完成更复杂的学习任务.多层感知机给我们带来的启示是,神经网络的层数直接决定了它对现实的刻画能力——利用每层更少的神经元拟合更加复杂的函数.但是

斯坦福大学机器学习公开课学习—2.监督学习应用·梯度下降

这节课的学习,相信一般上过统计或者运筹相关课程的同学应该都会有所了解.课上涉及的知识虽然很基础,但是也是很重要的. 在搜集了一些房价相关数据的基础上,利用线性回归算法来预测房价. 为了方便算法的训练推导,进行了很多符号的标准规定,从这当中也学到了一些知识,以后自己在进行一些算法的推导时也可学习课上的这些标准符号和推导方式. 下面给出这堂课上的一些干货. 1.机器学习算法的基本框架 2.最小二乘法——线性回归常用的代价函数,即误差平方和最小 3.参数学习算法——梯度下降算法,包含批量梯度下降和随机

(转)零基础入门深度学习(6) - 长短时记忆网络(LSTM)

无论即将到来的是大数据时代还是人工智能时代,亦或是传统行业使用人工智能在云上处理大数据的时代,作为一个有理想有追求的程序员,不懂深度学习(Deep Learning)这个超热的技术,会不会感觉马上就out了?现在救命稻草来了,<零基础入门深度学习>系列文章旨在讲帮助爱编程的你从零基础达到入门级水平.零基础意味着你不需要太多的数学知识,只要会写程序就行了,没错,这是专门为程序员写的文章.虽然文中会有很多公式你也许看不懂,但同时也会有更多的代码,程序员的你一定能看懂的(我周围是一群狂热的Clean

梯度下降法和随机梯度下降法的区别

这几天在看<统计学习方法>这本书,发现 梯度下降法 在 感知机 等机器学习算法中有很重要的应用,所以就特别查了些资料.  一.介绍       梯度下降法(gradient descent)是求解无约束最优化问题的一种常用方法,有实现简单的优点.梯度下降法是迭代算法,每一步需要求解目标函数的梯度向量.  二.应用场景      1.给定许多组数据(xi, yi),xi (向量)为输入,yi为输出.设计一个线性函数y=h(x)去拟合这些数据. 2.感知机:感知机(perceptron)为二类分类

机器学习最常用优化之一——梯度下降优化算法综述

转自:http://www.dataguru.cn/article-10174-1.html 梯度下降算法是机器学习中使用非常广泛的优化算法,也是众多机器学习算法中最常用的优化方法.几乎当前每一个先进的(state-of-the-art)机器学习库或者深度学习库都会包括梯度下降算法的不同变种实现.但是,它们就像一个黑盒优化器,很难得到它们优缺点的实际解释.这篇文章旨在提供梯度下降算法中的不同变种的介绍,帮助使用者根据具体需要进行使用. 这篇文章首先介绍梯度下降算法的三种框架,然后介绍它们所存在的

深度学习及神经网络学习总结

ps:我是在高一的时候第一次脑海中接触神经网络这个概念......,注意只是接触,一直扔到现在 1. 简介 神经网络和深度学习是由Michael Nielsen所写,其特色是:兼顾理论和实战,是一本供初学者深入理解Deep Learning的好书. 2. 感知器与sigmoid神经元 2.1 感知器(Perceptrons) 感知器工作原理:接收一系列二进制输入,经过特定的规则计算之后,输出一个简单的二进制. 计算规则:通过引入权重(weights)表示每个输入对于输出的重要性,则有 记w?x=

快速上手深度学习 掌握TensorFlow模型构建与开发

第1章 课程介绍介绍机器学习的背景,介绍tensorflow的背景,介绍课程python,numpy,virtualenv等前置学习内容,安装tensorflow1-1 导学1-2 课程安排1-3 深度学习背景1-4 tensorflow优势1-5 开发环境1-6 virtualenv简介1-7 python常用操作1-8 numpy常用操作011-9 numpy常用操作021-10 Mac下TensorFlow安装1-11 Windows下TensorFlow安装1-12 ubuntu下Ten

深度学习相关概念整理

深度学习相关概念整理 数值梯度和解析梯度 数值梯度就是通过梯度得定义去计算出来的梯度:给予x_i一个非常小的偏移量,去计算出y的偏移量,最后用y的偏移去除以x_i的偏移就是在x_i处的偏导数. 解析梯度就是对目标函数进行直接求偏导,得到的偏导式所算出来的梯度. CNN中的卷积层与池化层 卷积层,就是将两个对应的函数进行卷积操作.举个例子,有一组input的image,数据大小为7x7x3,假设有两个filter,大小为3x3x3,步长为2,(size+(n-1)*步长=7)那么我可以在卷积层的o