前馈神经网络FNN、多层感知机MLP和反向传播推导

目录

一、前馈神经网络FNN

激活函数的使用

二、多层感知机MLP

MLP的典型结构

多层感知机MLP的特点

和前馈神经网络FNN的区别

三、传播推导

1、前向传播(Forward propagation)

(1)输入层到隐藏层

(2)隐藏层到输出层

2、反向传播(Backward propagation)

(1)正向传播(Forward Pass)

(2)反向传播(Backward Pass)

① 链式求导法则

② 梯度计算

反向传播算法的作用

具体的推导步骤

总结

三、常见问题

1、如何理解“梯度指向了损失函数增加最快的方向”

2、为何说“最佳参数解的最简单方式就是微分方程等于0找解”

3、学习率跟谁有关?


一、前馈神经网络FNN

给定一组神经元,我们可以将神经元作为节点来构建一个网络。不同的神 经网络模型有着不同网络连接的拓扑结构。一种比较直接的拓扑结构是前馈网络。

前馈神经网络(Feedforward Neural Network,FNN)是最早发明的简单人工神经网络。前馈神经网络也经常称为多层感知器(Multi-Layer Perceptron,MLP)。但多层感知器的叫法并不是十分合理,因为前馈神经网络其实是由多层的 Logistic 回归模型(连续的非线性函数)组成,而不是由多层的感知器(不连续的非线性函数)组成。

在前馈神经网络中,各神经元分别属于不同的层。每一层的神经元可以接收前一层神经元的信号,并产生信号输出到下一层。第0层称为输入层,最后一层称为输出层,其他中间层称为隐藏层。整个网络中无反馈,信号从输入层向输出层单向传播,可用一个有向无环图表示。

多层前馈神经网络

激活函数的使用

在FNN中处理二维矩阵输入时,激活函数通常作用于每个元素上。也就是说,对于二维矩阵中的每个元素,都会独立地应用激活函数f。这个过程通常发生在网络的隐藏层,其中每个神经元接收来自前一层的加权输入,然后通过激活函数转换成一个新的矩阵,用作下一层的输入。

在实际的神经网络中,隐藏层的每个神经元通常会接收来自前一层所有神经元的加权和,然后通过激活函数。这意味着,虽然激活函数是逐元素应用的,但在计算每个隐藏层神经元的输出时,会先进行一个线性变换(即 𝑤⋅𝑥+𝑏,其中 𝑤是权重,𝑏是偏置)。

二、多层感知机MLP

多层感知机(Multilayer Perceptron,MLP)是一种特殊的前馈人工神经网络,是前馈神经网络的一个子集。

所有的多层感知机都是前馈神经网络,但并非所有的前馈神经网络都是多层感知机。

MLP是机器学习中常见的模型之一,特别是在处理表格数据时。它们在许多领域都有应用,包括分类、模式识别、预测等。然而,MLP也有其局限性,比如容易过拟合,以及对输入特征的缩放敏感等问题。

MLP的典型结构

  1. 输入层:接收原始数据。
  2. 隐藏层:一个或多个层,负责处理输入层的信息并提取特征。
  3. 输出层:产生最终的预测结果。

多层感知机MLP的特点

  1. 至少三层:一个输入层、至少一个隐藏层和一个输出层。
  2. 全连接:除输入层外,每一层的所有神经元都与前一层的所有神经元相连。
  3. 非线性激活函数:除输入节点外,每个节点都是一个带有非线性激活函数的神经元。每个神经元都使用非线性激活函数,如ReLU、sigmoid或tanh。

和前馈神经网络FNN的区别

  • 复杂性:并非所有的前馈神经网络需要有多个隐藏层或非线性激活函数。例如,一个只有输入层和输出层的网络,没有隐藏层,也是一个前馈神经网络,但不是多层感知机。
  • 通用逼近能力:MLP因其多层结构和非线性激活函数,通常具有更强的学习和逼近复杂函数的能力。
  • 应用范围:MLP由于其结构和学习能力,常用于分类、模式识别和预测任务,而更简单的前馈网络可能用于更特定的任务或作为更复杂网络架构的一部分。

MLP中,每个连接的权重和偏差都通过训练过程进行调整,以最小化输出和目标值之间的差异。这个过程通常涉及大量的计算,因此MLP的实现通常依赖于高效的数学库和硬件加速。

三、传播推导

这是一个MLP的结构,共有n个样本,每个样本对应m个输出值。假设隐藏层只有一层,其中隐藏层有p个hidden node。

其中每个输入的图片维度为d,则样本表达形式为:

其中:d为每个输入样本的维度,x(i)是一个样本,总共有n个(对应于样本个数),m为每个样本对应的输出数量。

1、前向传播(Forward propagation)

(1)输入层到隐藏层

其中右侧是从左侧的图中截取出来的一个运算过程。即输入层到隐藏层的值为sk,k=1,2,…,p,是输入层输入数据的加权线性和

其中:vik是第i个输入到第k个hidden node的权重。i对应的是输入值的顺序,k对应的是神经元节点的顺序。

在隐藏层中,经过非线性转换(假设激活函数为f1),得到隐藏层的输出为hk,k=1,2,…,p。

(2)隐藏层到输出层

隐藏层到输出层的值为zj,j=1,2,…,m,是隐藏层输出hk,k=1,2,…,p加权线性和

其中:wkj是第k个hidden node输出到第j个输出值的权重。

在输出层中,经过非线性转换(假设激活函数为f2),得到输出层的输出为yj,j=1,2,…,m。

2、反向传播(Backward propagation)

反向传播算法是训练多层神经网络,特别是前馈神经网络(如多层感知机)的关键算法。它结合了梯度下降法和链式求导法则,用于计算网络中每个参数的梯度,以便通过迭代调整这些参数来最小化网络的预测误差。反向传播算法包括两个主要的传播过程:

(1)正向传播(Forward Pass)

在这个阶段,输入数据通过网络的多个层次(从输入层到隐藏层,最后到输出层)进行处理。在每个层级,数据会通过一个加权求和(包括一个偏置项)并应用一个非线性激活函数。每一层的输出都是下一层的输入。在每个神经元中,输入信号通过加权求和,然后通过一个非线性激活函数进行转换。

最终,输出层生成一个预测值,这个值与真实值之间的差异用来衡量网络的性能。

(2)反向传播(Backward Pass)

反向传播阶段的目标是找到一种方法来调整网络中的权重,以减少预测误差。这个过程从输出层开始,逆向遍历网络的每一层。

在这个阶段,算法计算输出层的预测值和真实值之间的误差,然后这个误差会通过网络反向传播,直到达到输入层。在反向传播过程中,利用链式求导法则计算每个权重对最终误差的贡献(即梯度),并更新权重以减少误差。

① 链式求导法则

链式求导法则是微积分中的一种计算方法,用于计算复合函数的导数。在神经网络的上下文中,它用于计算损失函数相对于网络中每个权重的导数。这是因为损失函数(如均方误差或交叉熵损失)是通过网络的多个层次复合而成的。

② 梯度计算

梯度是一个向量,其每个元素都是损失函数相对于网络中某个权重的偏导数。换句话说,梯度指向了损失函数增加最快的方向。在反向传播算法中,我们计算损失函数相对于每个权重的偏导数,以确定如何调整权重以减少误差。

反向传播算法的作用
  • 梯度计算:为每个权重计算误差梯度,这是权重更新的基础。
  • 权重更新:利用梯度下降或其他优化算法来更新网络中的权重和偏置,以减少预测误差。
  • 损失函数最小化:通过迭代调整权重,反向传播算法旨在最小化网络的损失函数,即预测值和真实值之间的差异。
  • 泛化能力提升:通过优化网络参数,提高模型对未见数据的预测能力,即提升模型的泛化能力。

反向传播的目的是利用最后的目标函数(loss/cost function)来进行参数的更新,一般来说都是使用误差均方和(mean square error)当做目标函数。误差值越大,说明参数学习的不好,还需要继续学习,直到参数或者误差值收敛。

具体的推导步骤

  1. 计算最终误差:首先计算输出层的预测值和真实值之间的误差,这通常通过损失函数来量化。
  2. 应用链式求导:然后,利用链式求导法则,从输出层开始,逆向计算每个层的误差相对于该层输入的偏导数。这涉及到对激活函数求导以及对权重求导。
  3. 计算梯度:通过将这些偏导数与前一层的误差信号相乘,可以得到每个权重的梯度。
  4. 更新权重:最后,使用这些梯度来更新每个权重,通常通过梯度下降法或其他优化算法来实现。权重更新的目的是减少损失函数的值,从而提高网络的预测准确性。

假设x(i)是第i层的输入值,其输出值为:

其目标的误差为:

所有样本的误差和当作目标函数:

所以要找到最佳参数解(参数只有两个权重wkj和vik),最简单的方式就是微分方程等于0找解:

但是当参数量比较多的时候,就不能直接找到唯一解,所以还是要依赖梯度下降(Gradient Descent)找最佳解。

针对上述的两个参数(wkj和vik)求最佳值:

其中\eta为学习率(learning rate):

输出层到隐藏层(权重为wkj):

链式求导(chain rule):

隐藏层到输入层

隐藏层到输入层(权重为vik):

链式求导(chain rule):

所以:

最后把n个样本所有的梯度(gradient)相加得到参数的更新:

其中需要注意的地方:非线性转换/激活函数(f1/f2)在反向传播的时候都有微分,所以在选择激活函数时必须选择可微分函数。

总结

MLP是利用梯度下降(gradient descent)求最佳参数解:

最后代入到MLP内的前向传播(Forward propagation)即得到最后的预测值。

三、常见问题

1、如何理解“梯度指向了损失函数增加最快的方向

梯度向量中的每个分量(即偏导数)都表示了在损失函数中,如果沿着该分量对应的维度(也就是权重)增加一个极小的量,损失函数增加的速度。换言之,梯度向量告诉你了损失函数在权重空间中的“最陡峭”的上升方向。

为了深入理解这个概念,可以从以下几个方面考虑:

  1. 多维空间中的“方向”:在多维空间(比如权重空间)中,方向不再像在二维或三维空间中那样直观。在这里,“方向”可以用一个向量来表示,这个向量的每个分量对应于空间中的一个维度。

  2. 损失函数的曲面:想象损失函数是权重空间中的一个曲面,我们的目标是找到这个曲面的最小值。在曲面上任意一点,都存在一个方向使得曲面上升最快,这个方向就是损失函数在该点的梯度。

  3. 梯度下降:在机器学习中,我们通常使用梯度下降算法来优化损失函数。梯度下降的基本思想是沿着梯度的相反方向(即下降方向)移动,因为这样做可以减少损失函数的值。通过不断迭代这个过程,我们希望找到损失函数的局部最小值(或者在某些情况下是全局最小值)。

  4. 数学表述:梯度 ∇𝐽(𝑤) 是损失函数 𝐽(𝑤)关于权重 𝑤的向量导数。如果我们有一个权重向量 𝑤,损失函数 𝐽(𝑤)的梯度可以写作:

        其中,\frac{\partial J}{\partial wi}是损     失函数相对于第 𝑖i个权重的偏导数。

直观理解:如果将损失函数想象成一座山,那么梯度向量就指向了这座山“最陡”的地方,也就是上升最快的方向。梯度下降算法就是通过沿着与这个最陡方向相反的方向走,来试图找到山的底部,即损失函数的最小值。

2、为何说“最佳参数解的最简单方式就是微分方程等于0找解

当提到“微分方程等于0找解”时,通常是在谈论如何找到损失函数相对于每个权重的偏导数的零点。这个过程是梯度下降算法的一部分,目的是找到损失函数的最小值。

  1. 微分方程:在机器学习中,通常不会使用传统意义上的微分方程,而是使用偏导数的概念。当说“微分方程”时,我们实际上是在谈论损失函数相对于权重的偏导数

  2. 偏导数:损失函数 𝐽相对于权重 𝑤𝑘𝑗或 𝑣𝑖𝑘的偏导数表示了当权重 𝑤𝑘𝑗或 𝑣𝑖𝑘增加一个极小量时,损失函数 𝐽的变化率。

  3. 等于0:当将损失函数相对于某个权重的偏导数设置为0时,是在寻找损失函数相对于该权重的局部最小值。在理论上,如果偏导数为0,那么在该点附近,损失函数不会随着权重的增加而增加,这通常意味着找到了一个局部最小点

  4. 求解:在实际操作中,通常不会直接求解偏导数等于0的解析解,因为这样的解可能很难找到,或者根本不存在。相反,我们使用数值优化方法,如梯度下降,来迭代地调整权重,直到找到损失函数的最小值。

3、学习率跟谁有关?

学习率(learning rate)是一个超参数,它决定了在每次迭代中权重更新的步长。选择合适的学习率对模型的训练过程和最终性能至关重要。学习率的选择通常基于以下几个方面:

  1. 经验:在实践中,数据科学家和机器学习工程师会根据经验来设置学习率。一些常见的初始学习率值在不同的应用领域和问题中被广泛使用。

  2. 文献推荐:对于某些特定的问题或模型,研究文献可能会推荐特定的学习率范围。

  3. 网格搜索:可以通过网格搜索(grid search)等超参数调优技术来寻找最佳的学习率。这涉及在一组预定义的学习率值中进行训练,并选择产生最佳性能的学习率。

  4. 自适应学习率优化器:一些优化算法,如Adam(Adaptive Moment Estimation)、RMSprop(Root Mean Square Propagation)或AdaGrad(Adaptive Gradient),能够自动调整学习率,使得训练过程更加高效。

  5. 学习率衰减(Learning Rate Decay):在训练过程中逐渐减小学习率是一种常见的做法。这可以通过多种方式实现,例如,随着时间的增加线性或指数衰减学习率。

  6. 实验:最终,确定最佳学习率通常需要实验。可以通过多次训练实验,每次使用不同的学习率,然后选择在验证集上表现最好的学习率。

  7. 自动化超参数优化工具:使用如Hyperopt、Optuna或Ray Tune等工具可以自动化超参数搜索过程,包括学习率的优化。

  8. 问题规模:问题的规模有时也会影响学习率的选择。对于大规模问题,可能需要较小的学习率以避免训练过程中的不稳定。

  9. 损失函数的性质:损失函数的平滑性和曲率也会影响学习率的选择。如果损失函数非常崎岖,可能需要较小的学习率以避免错过最小值。

在实际操作中,学习率的选择是一个迭代的过程,可能需要根据模型的训练动态和验证性能进行多次调整。正确选择学习率对于确保模型能够快速收敛到最小损失函数值,同时避免过拟合和欠拟合,是非常重要的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/629473.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

webpack生成模块关系依赖图示例:查看构建产物的组成部分 依赖关系图

npm i -D webpack-bundle-analyzer core-js babel-loaderwebpack.config.js const BundleAnalyzerPlugin require(webpack-bundle-analyzer).BundleAnalyzerPlugin; module.exports {entry: ./src/index.js,output: {filename: main.js,},// mode: production, // 或者 produ…

【数据结构】堆(超详细)

文章目录 前言堆的概念及结构堆的实现堆的向下调整算法(建小堆为例)堆的向上调整算法(建小堆为例)堆的初始化销毁堆堆的插入堆的删除(规定删堆顶的数据)取堆顶元素判断堆是否为空获取堆的个数 完整代码(包括测试代码&a…

k8s 二进制安装 详细安装步骤

目录 一 实验环境 二 操作系统初始化配置(所有机器) 1,关闭防火墙 2,关闭selinux 3,关闭swap 4, 根据规划设置主机名 5, 做域名映射 6,调整内核参数 7, 时间同步 三 部署 dock…

微软exchange邮箱发送

使用java发送exchange类型的邮件&#xff0c;foxmail中配置如下图&#xff1a; 需要的maven依赖如下&#xff1a; <dependency><groupId>com.microsoft.ews-java-api</groupId><artifactId>ews-java-api</artifactId><version>2.0</ve…

1. 杜克大学官方宣布2027届新生画像什么是vue关键特点核心概念简单示例生态系统

目录 1. 杜克大学官方宣布2027届新生画像 什么是vue 关键特点 核心概念 简单示例 生态系统 1. 杜克大学官方宣布2027届新生画像 杜克大学校报《The Chronicle》已连续第七年对杜克大学的一年级新生进行深入调查&#xff0c;探讨该群体家庭受教育背景、家庭收入水平以及…

异步I/O库-libuv介绍

1.简介 libuv是一个跨平台的支持事件驱动的异步I/O的库&#xff0c;使开发者可以以非阻塞的方式执行文件I/O操作、网络通信、子进程管理等。 libuv的主要特点包括&#xff1a; 事件循环&#xff1a;libuv有一个基于事件循环的模型&#xff0c;它不断地轮询事件&#xff0c;并…

洗地机怎么挑?洗地机选购指南,2024洗地机测评选购攻略

在快节奏的生活中&#xff0c;繁琐的清洁工作往往令人头疼&#xff0c;随着洗地机的诞生&#xff0c;极大地简化了清洁的过程&#xff0c;洗地机凭借着它吸拖洗为一体的高效清洁特点&#xff0c;受到家庭和商业场所的广泛欢迎。那么&#xff0c;洗地机怎么挑&#xff0c;要注意…

速度背!24上软考网工“经典100道母题来了”!

距离软考考试的时间越来越近了&#xff0c;趁着这两周赶紧准备起来。 今天给大家整理了——网络工程师经典100道母题&#xff08;含解析&#xff09;&#xff0c;有PDF版&#xff0c;可打印&#xff0c;每天刷一点&#xff0c;考试就像遇到“老朋友”。 第一章节&#xff1a;计…

重磅!OpenAI发布GPT-4o,非常惊艳语音版ChatGPT!

5月15日凌晨&#xff0c;谷歌召开“ I/O 2024”&#xff0c;生成式AI成为本次大会的重点并发布了一系列产品和多款大模型。 其中&#xff0c;谷歌DeepMind发布了一款全新的AI 代理&#xff08;Agent&#xff09;产品Project Astra&#xff0c;可以像昨天OpenAI发布的GPT4o一样…

springsecurity项目快速搭建

自定义security的搭建 package com.sangeng.config;import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;Co…

YOLOv8改进教程|加入可改变核卷积AKConv模块,效果远超DSConv!

⭐⭐ YOLOv8改进专栏|包含主干、模块、注意力机制、检测头等前沿创新 ​ ⭐⭐ 一、 论文介绍 论文链接&#xff1a;https://arxiv.org/abs/2311.11587 代码链接&#xff1a;GitHub - CV-ZhangXin/AKConv 论文速览&#xff1a;&#xff1a;AKConv是2023年11月发表的一种可变卷积…

详细分析Vue3中的reactive(附Demo)

目录 1. 基本知识2. 用法3. Demo 1. 基本知识 reactive 是一个函数&#xff0c;用于将一个普通的 JavaScript 对象转换为响应式对象 当对象的属性发生变化时&#xff0c;Vue 会自动追踪这些变化&#xff0c;并触发相应的更新 Vue2没有&#xff0c;而Vue3中有&#xff0c;为啥…

C++入门系列-赋值运算符重载

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 赋值运算符重载 运算符重载 C为了增强代码的可读性引入了运算符重载&#xff0c;运算符重载是具有特殊函数名的函数&#xff0c;也具有其返回值类型&#xff0c;函数名字以及参…

评价决策类-层次分析法

师从江北 问题引出 归一化处理&#xff1a;指标的数组[a b c]归一化处理得到[a/(abc),b/(abc),c/(abc)] 因为每个指标的重要性不同&#xff0c;所以要加上一个权重 如何科学的确定权重&#xff0c;就要用到层次分析法&#xff08;AHP&#xff09; 模型原理 建立递阶层次结构模…

百度云防护如何开启CC攻击防护

百度云防护的最重要的功能是可以CC攻击防护&#xff0c;针对CC攻击&#xff0c;百度云防护有被动的CC攻击拦截规则&#xff0c;也有主动自定义访问策略拦截。 今天百度云来教大家如何开启百度云防护的CC攻击防御功能。 1.进入防护模板功能-创建模板 2.开启CC攻击防御功能&…

ubuntu20.04 ROS 环境下使用速腾80线激光雷达

1.相关系统环境 系统版本:ubuntu 20.04 ROS版本&#xff1a;ROS1 - noetic 激光雷达型号&#xff1a;RoboSense Ruby &#xff08;更新于2024.5.14&#xff09; 2.网口配置&#xff1a; 将PC/工控机的网口配置为&#xff1a; ipv4&#xff0c;方式设置为手动 ip地址、掩码以…

半小时搞懂STM32知识点——UART

1.UART 1.1为什么要使用UART这种协议?介绍一下UART及其特点 成本低&#xff0c;硬件简单&#xff0c;数据格式灵活&#xff1b; 低速全双工异步串行通信 1.2 UART数据帧格式&#xff1f; 起始位&#xff08;1&#xff09;&#xff0b;数据位&#xff08;5-8&#xff09; 校验位…

保研机试之【execve函数】

execve 参考&#xff1a;fork&#xff08;&#xff09;函数两次返回_fork是如何返回两次的-CSDN博客 setjmp/longjmp 还有E&#xff1a;

解决kali Linux2024无法获取动态IPv4地址(DHCP)解决方案

用root用户启动终端 进入根目录&#xff0c;选择配置文件 cd到根目录下/../etc/network找到interfaces文件 编辑interfaces文件 vi interfaces&#xff0c;编辑interfaces文件 输入如下命令 打开虚拟网络编辑器 选择虚拟机选项卡&#xff0c;编辑&#xff0c;打开虚拟网络编…

数据结构——二叉树知识点详解!

引言&#xff1a;本篇博客将详细介绍到数据结构中的又一位大将——二叉树。它也是我们目前学到的第一个非线性的数据结构。并且本章将学到的概念居多&#xff0c;希望大家可以理解并牢记。 更多有关C语言和数据结构知识详解可前往个人主页&#xff1a;计信猫 目录 一&#xff0…