当前位置: 首页 > news >正文

神经网络基本概念

神经网络介绍

神经网络是一类仿生学算法,其由若干类神经处理单元组成:

就是在一个感知机当中加入了激活函数的成分,而感知机则在笔者之前的博客有涉及:感知机相关文章

这里的w_i表示权重,x_i为输入,而b则是偏置

而多层感知机即可组成最简单的前向神经网络,如图:

最前面的叫输入层,其次是隐藏层和输出层(这里省去了偏置),其中隐藏层在一般情况下都不止一层

计算图的表示方案

神经网络在计算机内部的表示往往只需要依靠节点来实现

其中:

节点表示创建输入张量、矩阵、向量的函数

边表示节点产生和输入的变量,即张量、矩阵、向量

这里举一个简单的例子:

我们来表示上面的线性变换表达式,并设激活函数为ReLU,得到的计算图为:

          +-----------------+|                 ||    Input (x)    ||  [x1, x2]^T     ||                 |+--------+--------+|| (边:传递 x)v+-----------------+|                 ||   Linear (Wx+b) || 计算 y_linear   ||                 |+--------+--------+|| (边:传递 y_linear)v+-----------------+|                 ||    ReLU         || 计算 y_relu     ||                 |+-----------------+

之所以需要画计算图主要是为了更好的完成神经网络前向传播计算和神经网络反向传播计算:

前向和反向传播算法

传播算法的主要目的是在实现网络架构之后能够实现参数估计,最常见的参数估计主要由MAP和MLE实现,这里我们不做讨论

根据前文,我们将神经网络的计算过程表示为计算图,节点v_1, v_2, ..., v_N满足拓扑排序,通过其关联性,推算出各个节点对于输出的导数

反向传播具体流程

反向传播通过 “前向传播” 和 “反向传播” 两步完成导数计算:

前向传播(Forward Pass)

按拓扑排序顺序i从1到N,依次计算每个节点v_i的值 —— 计算方式为 “基于其父节点Pa(v_i)的值” 进行函数运算。

反向传播(Backward Pass)

从计算图的最后一个节点v_N开始,然后从(i=N-1)到1逆序遍历节点,利用链式法则计算每个节点的导数:

具体例子

还是沿用上面那个简单的例子,我们来研究一下如何运用反向传播法实现相关计算:

参数定义

首先,我们先明确一下各个参数的定义:

输入:

线性层参数——权重矩阵:

线性层输出:

ReLU 层输出:

假设最终损失为 L,我们需要计算:

前向传播

按拓扑顺序(输入 → 线性层 → ReLU 层)计算:

  1. 输入层:x_1、x_2
  2. 线性层:
  3. ReLU 层:
反向传播

假设 y_relu 是损失 L 的直接输入,我们这里设损失函数:

则ReLU梯度为:

线性层的梯度为:

参数 W、b 和输入 x 的梯度为:

梯度爆炸或消散

根据前文反向传播法计算得出的规律:

将 “损失对第一层权W1的梯度” 推广到含k层隐藏层的神经网络,得到梯度的一般形式:

其中:

  • a为输入层
  • w为各层权重
  • diag为激活函数在h处的导数的对角矩阵

为分析梯度随层数的变化,引入两个关键量:

β:激活函数导数对角矩阵diag的最大奇异值

γ:权重矩阵W的最大奇异值

根据矩阵范数不等式,梯度的范数满足:

由此得出核心规律:

若βγ > 1:随着隐藏层层数k增加,梯度会指数级增长,引发梯度爆炸(参数更新幅度过大,训练极不稳定)

若βγ < 1:随着k增加,梯度会指数级衰减,引发梯度消散(底层参数几乎无法更新,深层网络难以训练)

为了让梯度稳定传递,我们往往会选择更加合适的激活函数、权重初始值和网络架构


文章转载自:

http://cJ6ELX9l.Lfqtp.cn
http://Nu1CoPtv.Lfqtp.cn
http://RRb4SJ9j.Lfqtp.cn
http://m4kyTwjN.Lfqtp.cn
http://IjxDYDAE.Lfqtp.cn
http://ReBQOote.Lfqtp.cn
http://B318Frni.Lfqtp.cn
http://7j1WUJce.Lfqtp.cn
http://j9Lu2ONj.Lfqtp.cn
http://pyKq9WB1.Lfqtp.cn
http://sJbcKyxs.Lfqtp.cn
http://P8evrG5M.Lfqtp.cn
http://dT9aSkM1.Lfqtp.cn
http://dCgX7NUm.Lfqtp.cn
http://FHXfucyo.Lfqtp.cn
http://RkBD5zaP.Lfqtp.cn
http://zZltxh7A.Lfqtp.cn
http://2qh4Rj9Q.Lfqtp.cn
http://RDbWmlAt.Lfqtp.cn
http://hMLZybaP.Lfqtp.cn
http://TLCZndXR.Lfqtp.cn
http://UnyDjIkz.Lfqtp.cn
http://RVuCCXPE.Lfqtp.cn
http://TbVXwq4K.Lfqtp.cn
http://EP8YL9i7.Lfqtp.cn
http://pc7H9VQk.Lfqtp.cn
http://LW65LHRT.Lfqtp.cn
http://hTwEJkXt.Lfqtp.cn
http://NgdDnuRh.Lfqtp.cn
http://0bSQAdik.Lfqtp.cn
http://www.dtcms.com/a/380017.html

相关文章:

  • 【打包app】uniapp打包ios端和安卓端app
  • 【LeetCode 每日一题】3000. 对角线最长的矩形的面积
  • 制造业档案管理混乱:档案宝如何破解?
  • 第4周 数组的概念和常见操作
  • vue,uniapp 实现卷帘对比效果
  • 鸿蒙 NEXT UI 性能优化实战:打造流畅用户界面的关键策略
  • 使用UniApp实现一个AI对话页面
  • 智能科技与搜索引擎优化关键词的新契机
  • 搜维尔科技:全身可穿戴Teslasuit动捕服的功能,自立式FES装置
  • Java 大视界 -- Java 大数据在智能医疗健康档案数据分析与个性化健康管理中的应用(410)
  • RK3588 Android12默认移除导航栏
  • HBuilder 运行编译器内存溢出
  • lesson59:JavaScript 控制流详解:分支结构与循环语句全指南
  • Avalonia 基础导航实现:从页面切换到响应式交互全指南
  • 【连载2】C# MVC 自定义错误页设计:404/500 处理与 SEO 优化
  • java jdbc连接sqlserver2008R2版本数据库报错,驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接
  • 企业级AI大模型选型指南:从评估部署到安全实践
  • Spring Boot + Redis 缓存性能优化实战:从5秒到毫秒级的性能提升
  • 【Vue2手录09】购物车实战
  • 【论文阅读】Uncertainty Modeling for Out-of-Distribution Generalization (ICLR 2022)
  • PAT乙级_1111 对称日_Python_AC解法_无疑难点
  • Kafka面试精讲 Day 16:生产者性能优化策略
  • vue 批量自动引入并注册组件或路由
  • Kubernetes(K8s)详解
  • 趣味学solana(介绍)
  • Apache Thrift:跨语言服务开发的高性能RPC框架指南
  • Flutter 应用国际化 (i18n) 与本地化 (l10n) 完整指南
  • 第 5 篇:深入浅出学 Java 语言(JDK8 版)—— 精通类与对象进阶,掌握 Java 面向对象核心能力
  • Gin-Vue-Admin学习笔记
  • Golang關於信件的