多层感知机理解(多层感知机原理)

多层感知器(Muti-LayerPercetron)和卷积网络(ConvolutionalNeuralNetwork)。这两种网络都属于前馈型网络(Feedforwardnetwork),其中多层感知器(MLP)是最简单也是最常见的一种神经网络结构,它是所有其他神经网络结构的基础,好在我对神经网络的了解是从卷积神经网络开始的,对基本的原理和模型已经有了了解,所以学习起来相对容易,先看多层感知机的模型:1.网络的连接及输出:1.最左边就是我们的输入层了,算是网络的第0层,通常是一个向量x:

大家好,又见面了,我是你们的朋友全栈君。

一.网络的原理和结构

多层感知器(Muti-Layer Percetron)和卷积网络(Convolutional Neural Network)。这两种网络都属于前馈型网络(Feedforward network),其中多层感知器(MLP)是最简单也是最常见的一种神经网络结构,它是所有其他神经网络结构的基础,

好在我对神经网络的了解是从卷积神经网络开始的,对基本的原理和模型已经有了了解,所以学习起来相对容易,先看多层感知机的模型:
在这里插入图片描述
如何设计一个网络,输入代表像素的值,输出0-9之间的一个正确的数字
在这里插入图片描述
在这里插入图片描述
先把神经元当做数字
在这里插入图片描述
在这里插入图片描述
每个神经元里面是我们要提取的特征值,即像素的灰度值,0表示纯黑,1 表示纯白
在这里插入图片描述

这784个神经元组成了第一层,即神经网络的输入层

网络的最后一层是输出层,输出的是可能的概率,哪个概率最大,就代表识别的结果是哪个数字
在这里插入图片描述

网络的中间是隐藏层,包含这一些算法
在这里插入图片描述
比如网络的第三层,我们已经提取到局部的特征,只需要考虑将局部特征组合起来有多少 可能组成某一个数字
在这里插入图片描述

在这里插入图片描述
那再往前推,前面的一层网络就要能提取出更小的局部特征,把他们组合起来
在这里插入图片描述
通过权重值w,来提取我们关注的区域的值
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这个加权和,再通过激活函数映射到[0,1]的区间

在这里插入图片描述
而通过偏置值,控制加权和不过早的激发

在这里插入图片描述
将加权和减去一个数,不让不必要的神经元激活,
在这里插入图片描述
权重代表我们关注什么样的图案,而偏置值代表加权和有多大激活神经元才有意义

在网络的第二层,每一个神经元都和上一层的784个神经元保持全连接
在这里插入图片描述

每个神经元都带一个权重和偏置值
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
用向量表示
在这里插入图片描述
所以,网络中每一个神经元更像一个函数,接收输入,输出0-1的值
在这里插入图片描述

进而整个网络也可以看成一个函数,接收输入,输出一个结果
在这里插入图片描述

在这里插入图片描述

二.网络如何学习

在网络训练的时候,我们需要定义一个代价函数,来告诉网络与正确值的差距在这里插入图片描述
定义正确值1,其他为0,将网络输出的结果与实际结果相减,再将他们差的平方加起来,得到一个损失值
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代价函数输出单个数值,来评价整个网络中的权重和偏置值与正确结果的差距
在这里插入图片描述
网络需要知道如何调整这些输入参数使输出接近正确的结果

以二维图像为例

随便 选一个输入值,然后考虑向左还是向右
在这里插入图片描述

计算斜率,斜率为正,表示函数是上升,那么我们梯度的反方向即向左

斜率为负,表示梯度是下降的,我们继续往右找到最低点
在这里插入图片描述

在每一点这样重复的计算斜率,直到找到局部最低点
在这里插入图片描述
在这里插入图片描述
在三维空间如何计算
在这里插入图片描述
同样也是计算梯度,沿梯度的反方向下降一小步

在这里插入图片描述

梯度如何计算:

梯度,就是封装了所有偏导的向量
在这里插入图片描述

在这里插入图片描述

这样我们就有了一个权重向量和一个反向梯度向量

在这里插入图片描述
将两个向量的对应的每一项相加,得到新的权重,再更新权重,如此循环
在这里插入图片描述
同时,代价值的绝对值表示每个w和B的重要程度
在这里插入图片描述
假如有一个函数的在点[1,1]的梯度向量是 [ 3 1 ] \begin{bmatrix} 3\\1\\ \end{bmatrix} [31]
在这里插入图片描述
在这里插入图片描述
也可以理解为改变x对函数影响更大

在这里插入图片描述

这样来看,网络的代价函数是把权重和偏置作为输入

在这里插入图片描述

三.反向传播法

通过代价函数我们得到了误差值

然后需要把所有样本的误差值平均值

在这里插入图片描述

我们求出的负梯度,同时反映了代价函数值的重要程度,
在这里插入图片描述
比如样本2,网络输出的值与正确的值差距较大,如何增大这个输出呢
多层感知机理解(多层感知机原理)
如何让这个结果变大

我们知道这个结果是上一层的输出+权重+偏置再通过激活函数得到的

那么有三个方法

*增大上一层的输出

*增加权重

*增加偏置值

在这里插入图片描述
如何增加权重

比较亮的神经元,对应的权重对结果影响相对更大,所以增加相对亮的神经元,训练的效率会更高
在这里插入图片描述
所以当反向传播的时候,不仅要看高边哪些权重,还要看改变那些权重性价比高
在这里插入图片描述
如何改变上一层的输出

和更改权重一样,如果我们需要结果更大的时候,依据权重的大小,对上一层的结果做出呈比例的改变
在这里插入图片描述
结果2期待上一层的值如何改变,比如增大

结果3期待上一层的值如何改变,比如减小

我们把这些期待全部加起来,作为如何改变上一层的值的指示

如此往复循环,达到训练的效果

这就是反向传播的理念
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/128227.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python中modulenotfounderror_esxi安装报错

    python中modulenotfounderror_esxi安装报错1.下载安装包https://www.python.org/ftp/python/该目录下选择所需要的版本进行下载、解压。wgethttps://www.python.org/ftp/python/3.7.1/Python-3.7.1.tgztar-xzvfPython-3.7.1.tgz2.二进制文件安装  1.创建存放目录mkdir/usr/l…

    2022年9月2日
    2
  • 客户端timewait

    客户端timewaitSocket中的TIME_WAIT状态在高并发短连接的server端,当server处理完client的请求后立刻closesocket此时会出现time_wait状态然后如果client再并发2000个连接,此时部分连接就连接不上了,用linger强制关闭可以解决此问题,但是linger会导致数据丢失,linger值为0时是强制关闭,无论并发多少多能正常连接上,如果非0会发生部分连接不上…

    2022年6月5日
    37
  • Java枚举详解

    Java枚举详解枚举是一个被命名的整型常数的集合,用于声明一组带标识符的常数。枚举在曰常生活中很常见,例如一个人的性别只能是“男”或者“女”,一周的星期只能是7天中的一个等。类似这种当一个变量有几种固定可能的取值时,就可以将它定义为枚举类型。在JDK1.5之前没有枚举类型,那时候一般用接口常量来替代。而使用Java枚举类型enum可以更贴近地表示这种常量。声明枚举声明枚举时必须使用enu…

    2022年6月4日
    27
  • Android源码学习之环境搭建(Ubuntu下载Android源码)

    Android源码学习之环境搭建(Ubuntu下载Android源码)已经有一个多月没有看Android的知识了,之前在杭州时就买了邓凡平的《深入理解Android卷I》一直没来得及研究。后来因为公司要求,要为新的项目做准备,做各种业务的KT和技术的training,虽然新技术本身的难度不大,但是业务知识很是复杂,搞的头大,到现在终于有了一些头绪。趁现在有时间来研究下Android的源码。之前没有接触过Linux系统,我的本本现在用的是Windows系统,已经用习

    2022年5月6日
    38
  • Java中如何将int 类型转换为 Long类型

    Java中如何将int 类型转换为 Long类型版权声明:本文由施勇原创,转载请注明作者和出处!   https://blog.csdn.net/shiyong1949/article/details/52687955Longl=(Long)3;1很多同学可能会用上面的方法将int类型转换为Long类型,但事实上这样是不可行的。因为Long是包装类,而int是值类型数据,两者是不能这样强转的。longl=(long)3;…

    2022年5月3日
    2.0K
  • 在类中,调用这个类时,用$this->video_model是不是比每次调用这个类时D(‘Video’)效率更高呢…

    在类中,调用这个类时,用$this->video_model是不是比每次调用这个类时D(‘Video’)效率更高呢…

    2021年11月3日
    45

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号