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

多层感知器(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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java的常量

    java的常量JAVA变量与常量常量常量值常量常量的声明定义常量常量在c语言编程网中的定义是指在程序的整个运行过程中值保持不变的量。在这里要注意常量和常量值是不同的概念,常量值是常量的具体和直观的表现形式,常量是形式化的表现。这里体现出常量值这一定义,我认为的常量值就是值,具体的某一数值百度出来的常量是定义为两种意思:一是不可变的变量,也是最最最开始接触java知道的,二如上。平时所说的值指的是常量值,常量是不可变的变量(用final修饰的变量)常量值提到常量值不得不说一下计数法,八进制、十进制、十六进制所代

    2022年7月8日
    22
  • java h2数据库_JAVA 项目中使用 H2 数据库

    java h2数据库_JAVA 项目中使用 H2 数据库JAVA项目中使用H2数据库发布时间:2018-06-0815:43,浏览次数:823,标签:JAVA为什么要使用H2数据库H2数据库是可以嵌入到JAVA项目中的,因为只需要导入一个jar包即可,所以非常的方便。项目中导入H2将H2的jar包放到classpath里即可,我是用的maven,maven的配置如下com.h2databaseh2<version>1.4.1…

    2022年8月31日
    2
  • 如何用51单片机控制步进电机运动「建议收藏」

    如何用51单片机控制步进电机运动「建议收藏」本来接触单片机挺久了的,但是一直只是停留在非常初级的认识阶段,本科的时候上过几门课,但是从来没有自己捣鼓过单片机,这次突然来了兴趣,感觉一下子学到了好多东西,在这里好好整理一下。这篇文章只适合于入门阶段的小白阅读,高手请绕道。12年年初的时候购买了一套普中科技的“单片机开发试验仪”,好多次想好好学学,结果每一次都半途而废,主要原因还是周围的人都不会用,有问题都不知道找谁问,结果锁到箱子里一直到现在。

    2022年6月1日
    33
  • 贪心算法几个经典的例子有哪些_贪心算法一定是最优解吗

    贪心算法几个经典的例子有哪些_贪心算法一定是最优解吗贪心算法一、基本概念:      所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。     贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性,即某个状态以后的过程不会影响以前的状态,只与当前状态有关。    所…

    2022年10月26日
    0
  • java静态变量,静态方法的理解

    java静态变量,静态方法的理解

    2021年7月16日
    67
  • oracle ORA-00918 未明确定义列「建议收藏」

    oracle ORA-00918 未明确定义列「建议收藏」 出现这种错误,一般是列名重复导致的,如下: createtabletestchar(v_datevarchar2(20),d_datedate)insertintotestcharselect’2018-07-20′,date’2018-07-20’fromdual;#这时候有两个字段都是vv,那么查询时,就会区分不出来这两列,oracl…

    2022年10月4日
    0

发表回复

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

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