OpenCV4深度神经网路--神经网络基础

感知机原理

感知机可以说是最古老的分类方法之一了,在1957年就已经提出。今天看来它的分类模型在大多数时候泛化能力不强,但是它的原理却值得好好研究。因为研究透了感知机模型,学习支持向量机的话会降低不少难度。同时如果研究透了感知机模型,再学习神经网络,深度学习,也是一个很好的起点。

  • 感知机思想
    比如我们在一个平台上有很多的男孩女孩,感知机的模型就是尝试找到一条直线,能够把所有的男孩和女孩隔离开。放到三维空间或者更高维的空间,感知机的模型就是尝试找到一个超平面,能够把所有的二元类别隔离开。当然你会问,如果我们找不到这么一条直线的话怎么办?找不到的话那就意味着类别线性不可分,也就意味着感知机模型不适合你的数据的分类。使用感知机一个最大的前提,就是数据是线性可分的。这严重限制了感知机的使用场景,而且这个模型只能用于二元分类,无法学习复杂的非线性模型,因此在工业界无法使用。它的分类竞争对手在面对不可分的情况时,比如支持向量机可以通过核技巧来让数据在高维可分,神经网络可以通过激活函数和增加隐藏层来让数据可分。
  • 感知机模型
    在这里插入图片描述
  • 感知机数学原理
    学习策略:
    在这里插入图片描述
    输入空间中任意一点到超平面的距离为:
    在这里插入图片描述
    对于误分类来说,- yi (w·xi+b) > 0 成立,因为在误分类情形下 yi 的值与 w·xi+b 的值符号相反,又因为 yi 取值为+1,-1,用 yi 的值可以去掉上面的距离公式中的绝对值符号,因此误分类点 xi 到超平面的距离为:
    在这里插入图片描述
    这样,假设超平面S的误分类点集合为M,那么所有误分类点到超平面S的总距离为:
    在这里插入图片描述
    我们研究可以发现,分子和分母都含有 w ,当分子的 w 扩大N倍时,分母的 L2 范数也会扩大N倍。也就是说,分子和分母有固定的倍数关系。那么我们可以固定分子或者分母为1,然后求另一个,即分子自己或者分母的倒数的最小化作为损失函数,这样可以简化我们的损失函数。在感知机模型中,我们采用的是保留分子,即最终感知机模型的损失函数简化为:
    在这里插入图片描述
    题外话,如果大家了解过支持向量机,就发现支持向量机采用的是固定分子为1,然后求1/||w||的最大化。采用不同的损失函数主要与它的后面的优化算法有关系。

神经网络

  • 神经元
    神经元和感知器(感知机)本质上是一样的,只不过我们说感知器的时候,它的激活函数是阶跃函数;而当我们说神经元时,激活函数往往选择为 sigmoid 函数或双曲正切函数 -tanh 函数。计算一个神经元的输出的方法和计算一个感知器的输出是一样的。如下图所示:
    在这里插入图片描述
    sigmoid函数定义:
    在这里插入图片描述
    sigmoid 函数是一个非线性函数,值域是(0,1)。函数图像如下图所示:
    在这里插入图片描述
    sigmoid函数的导数是:
    在这里插入图片描述
    可以看到,sigmoid 函数的导数非常有趣,它可以用 sigmoid 函数自身来表示。这样,一旦计算出 sigmoid 函数的值,计算它的导数的值就非常方便。用python绘制其图像为:
    在这里插入图片描述
  • 神经网络在感知机模型上主要做了三点扩展
    (1)加入了隐藏层
    加入了隐藏层,隐藏层可以有多层,增强模型的表达能力
    在这里插入图片描述
    (2)输出层的神经元也可以有多个
    这样模型可以灵活的应用于分类回归,以及其他的机器学习领域比如降维和聚类等
    在这里插入图片描述
    (3)对激活函数的扩展
    感知机的激活函数是 sign(z),虽然简单但是处理能力有限,因此神经网络中一般使用的其他的激活函数,比如我们在逻辑回归里面使用过的Sigmoid 函数,还有后来出现的 tanx, softmax 和 ReLU 等。通过使用不同的激活函数,神经网络的表达能力进一步增强。
  • 什么是神经网络

在这里插入图片描述
神经网络其实就是按照一定规则连接起来的多个神经元。上图展示了一个全连接(full connected, FC)神经网络,通过观察上面的图,我们可以发现它的规则包括:
(1)神经元按照层来布局。最左边的层叫做输入层,负责接收输入数据;最右边的层叫输出层,我们可以从这层获取神经网络输出数据。输入层和输出层之间的层叫做隐藏层,因为它们对于外部来说是不可见的;
(2)同一层的神经元之间没有连接;
(3)层与层之间是全连接的。第N层的每个神经元和第N-1层的所有神经元相连(这就是full connected的含义),第N-1层神经元的输出就是第N层神经元的输入;
(4)每个连接都有一个权值
上面这些规则定义了全连接神经网络的结构。事实上还存在很多其它结构的神经网络,比如卷积神经网络(CNN)、循环神经网络(RNN),他们都具有不同的连接规则。

深度神经网络

  • 深度神经网络 DNN
    对于隐藏层比较多(大于2)的神经网络叫做深度神经网络(Deep Neural Networks, 简称 DNN )。而深度学习,就是使用深层架构(比如,深度神经网络)的机器学习方法。那么深层网络和浅层网络相比有什么优势呢?简单来说深层网络能够表达力更强。事实上,一个仅有一个隐藏层的神经网络就能拟合任何一个函数,但是它需要很多很多的神经元。而深层网络用少得多的神经元就能拟合同样的函数。也就是为了拟合一个函数,要么使用一个浅而宽 的网络要么使用一个深而窄 的网络。而后者往往更节约资源。深层网络也有劣势,就是它不太容易训练。简单的说,你需要大量的数据,很多的技巧才能训练好一个深层网络。这是个手艺活。
  • DNN的基本结构
    虽然DNN看起来很复杂,但是从小的局部模型来说,每一个神经元的输出还是和感知机一样,即一个线性关系:Z=∑i(wi∗xi+b) 然后加上激活函数 σ(z),由于DNN 层数比较多,则权重 w(weight) 和偏置 b(bias) 的数量也就是很多了。
    权重W的定义:
    在这里插入图片描述
    偏置b的定义
    在这里插入图片描述
  • DNN前向传播算法数学原理
    在上一节,我们已经介绍了 DNN 各层线性关系系数 w,偏置 b 的定义。假设我们选择的激活函数是 σ(z),隐藏层和输出层的输出值为 a,则对于下图的三层 DNN,利用和感知机一样的思路,我们可以利用上一层的输出计算下一层的输出,也就是所谓的DNN前向传播算法。
    在这里插入图片描述
    在这里插入图片描述
  • DNN前向传播算法
    有了上一节的数学推导,DNN的前向传播算法也就不难了。所谓的DNN的前向传播算法也就是利用我们的若干个权重系数矩阵W,偏置向量b来和输入值向量x进行一系列线性运算和激活运算,从输入层开始,一层层的向后计算,一直到运算到输出层,得到输出结果为止。
    在这里插入图片描述
  • DNN前向传播算法小结
    单独看DNN前向传播算法,似乎没有什么大用处,而且这一大堆的矩阵W,偏倚向量b对应的参数怎么获得呢?怎么得到最优的矩阵W,偏置向量b呢?这个我们在讲DNN的反向传播算法时再讲。而理解反向传播算法的前提就是理解DNN的模型与前向传播算法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值