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

Day9 神经网络的偏导数基础

多变量函数与神经网络

在神经网络中,我们经常遇到多变量函数。这些函数通常描述了网络的输入、权重、偏置与输出之间的关系。例如,一个简单的神经元输出可以表示为:

z = f ( w 1 x 1 + w 2 x 2 + … + w n x n + b ) z = f(w_1x_1 + w_2x_2 + \ldots + w_nx_n + b) z=f(w1x1+w2x2++wnxn+b)

其中, x 1 , x 2 , … , x n x_1, x_2, \ldots, x_n x1,x2,,xn 是输入, w 1 , w 2 , … , w n w_1, w_2, \ldots, w_n w1,w2,,wn 是权重, b b b 是偏置, f f f 是激活函数, z z z 是输出。这是一个典型的多变量函数,其自变量包括输入 x i x_i xi、权重 w i w_i wi和偏置 b b b


偏导数的概念与计算

偏导数是多元函数相对于其某一个自变量的导数,求导时保持其他自变量不变。对于函数 z = f ( x , y ) z = f(x, y) z=f(x,y),其关于 x x x的偏导数定义为:

∂ z ∂ x = lim ⁡ Δ x → 0 f ( x + Δ x , y ) − f ( x , y ) Δ x \frac{\partial z}{\partial x} = \lim_{\Delta x \to 0} \frac{f(x + \Delta x, y) - f(x, y)}{\Delta x} xz=Δx0limΔxf(x+Δx,y)f(x,y)

类似地,关于 y y y的偏导数定义为:

∂ z ∂ y = lim ⁡ Δ y → 0 f ( x , y + Δ y ) − f ( x , y ) Δ y \frac{\partial z}{\partial y} = \lim_{\Delta y \to 0} \frac{f(x, y + \Delta y) - f(x, y)}{\Delta y} yz=Δy0limΔyf(x,y+Δy)f(x,y)

偏导数反映了函数在某一特定方向上的变化率。在神经网络中,我们特别关心损失函数 L L L关于权重 w i w_i wi和偏置 b b b的偏导数,因为它们指导了参数的更新。

偏导数的计算示例

考虑函数 f ( x , y ) = x 2 + x y + y 2 f(x, y) = x^2 + xy + y^2 f(x,y)=x2+xy+y2,我们可以分别计算其关于 x x x y y y的偏导数:

∂ f ∂ x = 2 x + y \frac{\partial f}{\partial x} = 2x + y xf=2x+y
∂ f ∂ y = x + 2 y \frac{\partial f}{\partial y} = x + 2y yf=x+2y

这两个偏导数描述了函数在 x x x y y y方向上的变化率。


多变量函数的最小值条件

对于多变量函数 f ( x 1 , x 2 , … , x n ) f(x_1, x_2, \ldots, x_n) f(x1,x2,,xn),取得最小值的必要条件是该函数在该点的所有偏导数都为零。即,如果存在一个点 ( x 1 ∗ , x 2 ∗ , … , x n ∗ ) (x_1^*, x_2^*, \ldots, x_n^*) (x1,x2,,xn)使得函数 f f f取得最小值,那么必须满足以下条件:

∂ f ∂ x 1 ( x 1 ∗ , x 2 ∗ , … , x n ∗ ) = 0 \frac{\partial f}{\partial x_1}(x_1^*, x_2^*, \ldots, x_n^*) = 0 x1f(x1,x2,,xn)=0
∂ f ∂ x 2 ( x 1 ∗ , x 2 ∗ , … , x n ∗ ) = 0 \frac{\partial f}{\partial x_2}(x_1^*, x_2^*, \ldots, x_n^*) = 0 x2f(x1,x2,,xn)=0
⋮ \vdots
∂ f ∂ x n ( x 1 ∗ , x 2 ∗ , … , x n ∗ ) = 0 \frac{\partial f}{\partial x_n}(x_1^*, x_2^*, \ldots, x_n^*) = 0 xnf(x1,x2,,xn)=0

这些条件表明,在函数的最小值点处,函数沿任何方向的变化率都是零。换句话说,从该点出发,无论我们朝哪个方向移动,函数值都不会下降。

必要条件与充分条件

需要注意的是,上述条件只是取得最小值的必要条件,而不是充分条件。也就是说,满足这些条件的点可能是最小值点,但也可能是最大值点或鞍点。为了确定一个点是否是最小值点,我们需要进一步分析函数的二阶导数或Hessian矩阵。

  • 二阶导数测试:对于二维函数,我们可以通过计算二阶偏导数并检查它们的符号来判断一个临界点(即所有一阶偏导数为零的点)是局部最大值、局部最小值还是鞍点。对于更高维度的函数,我们需要计算Hessian矩阵并分析其特征值。
  • Hessian矩阵:Hessian矩阵是一个由函数二阶偏导数组成的方阵。如果Hessian矩阵在临界点处是正定的(即所有特征值都大于零),则该点是局部最小值点;如果是负定的(即所有特征值都小于零),则该点是局部最大值点;如果是不定的(即既有正特征值又有负特征值),则该点是鞍点。

鞍点是一个数学概念,它指的是在函数图像上,一个点在某一方向上是局部最大值,而在另一方向上却是局部最小值,形状类似马鞍,因此得名。在数学中,如果一个函数在某点的梯度为零,且在该点附近函数的Hessian矩阵(描述函数局部曲率的矩阵)具有正的和负的特征值,则该点就是鞍点。

在神经网络中,鞍点的作用和存在是一个重要的挑战。神经网络训练的目标通常是找到损失函数的全局最小值,但鞍点却可能阻碍这一目标的实现。由于鞍点处的梯度为零,优化算法(如梯度下降法)在到达鞍点时可能会停滞不前,导致训练过程缓慢或无法收敛到全局最优解。此外,高维参数空间中的鞍点比局部最小值更为常见,这进一步增加了神经网络训练的难度。

因此,研究如何有效地识别和逃离鞍点,对于提高神经网络训练效率和性能具有重要意义。一些优化算法和技巧,如动量法、Adam优化器等,已经被提出用于应对鞍点问题,并帮助神经网络在训练过程中更好地找到全局最优解。

找了最具代表性的"鞍点"发源图,大家可以直观的体验一下“鞍点(Saddle Point)”

在这里插入图片描述

​ 上图这个图像是 z = x 2 − y 2 z = x^2 − y^2 z=x2y2,图中的小红点就是一个鞍点 (A saddle point (in red) on the graph of z = x 2 − y 2 z = x^2 − y^2 z=x2y2)

给大家看一下真实的马鞍对比:

在这里插入图片描述

实际应用中的挑战

在实际应用中,找到多变量函数的最小值点可能面临一些挑战:

  • 局部最小值:对于非凸函数,可能存在多个局部最小值点。梯度下降法可能会陷入其中某个局部最小值点而无法找到全局最小值点。
  • 鞍点:在高维空间中,鞍点比局部最小值点更常见。梯度下降法在鞍点附近可能会变得非常缓慢甚至停滞不前。
  • 计算复杂性:对于大规模神经网络和复杂损失函数,计算梯度和Hessian矩阵可能非常耗时和占用大量计算资源。

为了解决这些问题,研究人员提出了许多优化算法和技巧,如随机梯度下降法、动量法、Adam优化器等。这些算法通过不同的方式来加速收敛、逃离局部最小值点和鞍点以及降低计算复杂度。

直观理解最小值

考虑函数 f ( x , y ) = x 2 + y 2 f(x, y) = x^2 + y^2 f(x,y)=x2+y2的图像:

在这里插入图片描述

在这个图像中,我们可以看到函数 f ( x , y ) = x 2 + y 2 f(x, y) = x^2 + y^2 f(x,y)=x2+y2形成了一个开口向上的抛物面。抛物面的顶点位于原点 ( 0 , 0 ) (0,0) (0,0),这正是函数取得最小值的点。通过计算偏导数并设为零(即 ∂ f ∂ x = 2 x = 0 \frac{\partial f}{\partial x} = 2x = 0 xf=2x=0 ∂ f ∂ y = 2 y = 0 \frac{\partial f}{\partial y} = 2y = 0 yf=2y=0),我们就可以找到这个点。


扩展内容:拉格朗日乘数法

拉格朗日乘数法是一种用于解决约束优化问题的方法。它通过引入拉格朗日乘数将有约束的优化问题转化为无约束的优化问题,从而简化求解过程。以下是拉格朗日乘数法的基本步骤以及在实际求最小值问题中的应用:

示例:最小化函数 f ( x , y ) = x 2 + y 2 f(x, y) = x^2 + y^2 f(x,y)=x2+y2,在约束条件 g ( x , y ) = x + y − 1 = 0 g(x, y) = x + y - 1 = 0 g(x,y)=x+y1=0 下。
  1. 构造拉格朗日函数
    L ( x , y , λ ) = f ( x , y ) + λ g ( x , y ) L(x, y, \lambda) = f(x, y) + \lambda g(x, y) L(x,y,λ)=f(x,y)+λg(x,y) ,其中, λ \lambda λ就是拉格朗日数

  2. 求偏导数并设为零
    ∂ L ∂ x = ∂ f ∂ x + λ ∂ g ∂ x = 0 \frac{\partial L}{\partial x} = \frac{\partial f}{\partial x} + \lambda \frac{\partial g}{\partial x} = 0 xL=xf+λxg=0

    ∂ L ∂ y = ∂ f ∂ y + λ ∂ g ∂ y = 0 \frac{\partial L}{\partial y} = \frac{\partial f}{\partial y} + \lambda \frac{\partial g}{\partial y} = 0 yL=yf+λyg=0

    ∂ L ∂ λ = g ( x , y ) = 0 \frac{\partial L}{\partial \lambda} = g(x, y) = 0 λL=g(x,y)=0

  3. 解方程组

    从第一个和第二个偏导数方程中,我们有:

    • − 2 x = − 2 y ⇒ x = y -2x = -2y \quad \Rightarrow \quad x = y 2x=2yx=y
      将这个结果代入约束条件方程: x + x − 1 = 0 ⇒ 2 x = 1 ⇒ x = 1 2 x + x - 1 = 0 \quad \Rightarrow \quad 2x = 1 \quad \Rightarrow \quad x = \frac{1}{2} x+x1=02x=1x=21
      • 因此, y = 1 2 y = \frac{1}{2} y=21 也成立。
  • 所以,最优解是 x = 1 2 x = \frac{1}{2} x=21, y = 1 2 y = \frac{1}{2} y=21
  1. 验证结果
  • 检查是否满足约束条件:
    g ( 1 2 , 1 2 ) = 1 2 + 1 2 − 1 = 0 g(\frac{1}{2}, \frac{1}{2}) = \frac{1}{2} + \frac{1}{2} - 1 = 0 g(21,21)=21+211=0

    • 满足约束条件。将 x = 1 2 x = \frac{1}{2} x=21, y = 1 2 y = \frac{1}{2} y=21 代入原函数 f ( x , y ) f(x, y) f(x,y)

f ( 1 2 ) = 1 2 + 1 2 − 1 = 0 f(\frac{1}{2}) = \frac{1}{2} + \frac{1}{2} - 1 = 0 f(21)=21+211=0

  • 满足约束条件。将 x = 1 2 x = \frac{1}{2} x=21, y = 1 2 y = \frac{1}{2} y=21 代入原函数 f ( x , y ) f(x, y) f(x,y)

  • f ( 1 2 , 1 2 ) = ( 1 2 ) 2 + ( 1 2 ) 2 = 1 4 + 1 4 = 1 2 f(\frac{1}{2}, \frac{1}{2}) = (\frac{1}{2})^2 + (\frac{1}{2})^2 = \frac{1}{4} + \frac{1}{4} = \frac{1}{2} f(21,21)=(21)2+(21)2=41+41=21这是函数在约束条件下的最小值。

相关文章:

Day9 神经网络的偏导数基础

多变量函数与神经网络 在神经网络中,我们经常遇到多变量函数。这些函数通常描述了网络的输入、权重、偏置与输出之间的关系。例如,一个简单的神经元输出可以表示为: z f ( w 1 x 1 w 2 x 2 … w n x n b ) z f(w_1x_1 w_2x_2 \ldots…...

day4:tomcat—maven-jdk

一,java项目部署过程 编译:使用javac命令将.java源文件编译成.class宇节码文件打包:使用工具如maven或Gradle将项目的依赖、资源和编译后的字节码打包成一个分发格式,如.jar文件,或者.war文件(用于web应用&#xff09…...

apache-tomcat-6.0.44.exe Win10

apache-tomcat-6.0.44.exe Win10...

Redis(2)常用命令

安装Redis 现在我们安装Redis 5,Redis安装在Linux上面安装,如果想在本机上面安装多个Redis的话,就要使用Docker。 在Ubuntu上面安装: 切换到root用户使用apt命令搜索相关的软件包(apt search redis)apt …...

【原生js案例】ajax的简易封装实现后端数据交互

ajax是前端与后端数据库进行交互的最基础的工具,第三方的工具库比如jquery,axios都有对ajax进行第二次的封装,fecth是浏览器原生自带的功能,但是它与ajax还是有区别的,总结如下: ajax与fetch对比 实现效果 代码实现 …...

安卓环境配置及打开新项目教程,2024年12月20日最新版

1.去官网下载最新的Android Studio,网址:https://developer.android.com/studio?hlzh-cn 2.下载加速器,注册账号,开启加速器。网址:放在文末。 3.下载安卓代码,项目的路径上不能有中文,特别是…...

Docker 安装 禅道-21.2版本-外部数据库模式

Docker 安装系列 1、拉取最新版本(zentao 21.2) [rootTseng ~]# docker pull hub.zentao.net/app/zentao Using default tag: latest latest: Pulling from app/zentao 55ab1b300d4b: Pull complete 6b5749e5ef1d: Pull complete bdccb03403c1: Pul…...

写SQL太麻烦?免费搭建 Text2SQL 应用,智能写 SQL | OceanBase AI 实践

自OceanBase 4.3.3版本推出以来,向量检索的能力受到了很多客户的关注,也纷纷表达希望OB能拓展更多 多模数据库大模型 的AI应用实践。 在上篇文章 👉 OceanBase LLM,免费构建你的专属 AI 助手 ,我们介绍了如何去搭建一…...

数据分析实战—鸢尾花数据分类

1.实战内容 (1) 加载鸢尾花数据集(iris.txt)并存到iris_df中,使用seaborn.lmplot寻找class(种类)项中的异常值,其他异常值也同时处理 。 import pandas as pd from sklearn.datasets import load_iris pd.set_option(display.max_columns, N…...

【专题】2024抖音电商母婴行业分析报告汇总PDF洞察(附原数据表)

原文链接:https://tecdat.cn/?p38651 在数字化浪潮的席卷下,抖音电商母婴行业正经历着深刻变革。当下,年轻一代父母崛起,特别是 24 至 30 岁以及 18 至 23 岁的群体成为抖音母婴行业兴趣人群的主力军。他们带来全新育儿理念&…...

堆栈粉碎的原理与预防攻击措施

1、堆栈粉碎的原理 “堆栈粉碎”(stack smashing)指的是在计算机程序中利用缓冲区溢出漏洞来修改或破坏函数调用栈的过程。以下是其基本原理: 缓冲区溢出:当程序接收输入数据时,如果没有适当的边界检查和验证&#x…...

Flutter组件————AppBar

AppBar 是 Flutter 中用于创建应用程序顶部栏的组件,它遵循 Material Design 规范。 参数: 参数名称类型描述titleWidget设置 AppBar 中的标题文本或自定义标题小部件。automaticallyImplyLeadingbool决定是否自动添加返回按钮(如果页面不是…...

请问深度学习直接缝了别的模型,在论文中这种创新点应该如何描述呢?

作者:星辰 链接:https://www.zhihu.com/question/599461738/answer/3289126344 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 作为散养硕士,我们希望能早早发小论文&#xff0c…...

微流控专题 | 微流体应用说明——藻酸盐微球生产简介

基于水凝胶的递送系统正被越来越多地应用于各个领域,包括封装、保护以及在制药、保健品、食品工业中释放生物活性物质,还用于细胞/细菌/微生物的培养与植入,以及生物研究中基于细胞的基因操作。 尺寸在 50m 范围内的高度单分散的藻酸盐微球 —…...

【前后端】HTTP网络传输协议

近期更新完毕,建议关注、收藏! http请求 URL 严格意义上应该是URI http or https http不加密不安全;https加密协议(公网使用) http端口号80 https端口号443GET or POST GET和POST是HTTP请求的两种基本方法. 因为POST需…...

Fastdfs V6.12.1集群部署(arm/x86均可用)

文章目录 一、 Fastdfs 介绍二、部署 信息三、步骤tracker/storage 机器的 compose 内容storage 机器的 composetracker 与 storage 启动目录层级与配置文件测试测试集群扩容与缩减注意事项 一、 Fastdfs 介绍 FastDFS 是一款高性能的分布式文件系统,特别适合用于存…...

【LeetCode每日一题】——434.字符串中的单词数

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【解题思路】七【时空频度】八【代码实现】九【提交结果】 一【题目类别】 字符串 二【题目难度】 简单 三【题目编号】 434.字符串中的单词数 四【题目描述】 统计字符串中的单词个…...

windows C#-使用构造函数

实例化类或结构时,将会调用其构造函数。 构造函数与该类或结构具有相同名称,并且通常初始化新对象的数据成员。 在下面的示例中,通过使用简单构造函数定义了一个名为 Taxi 的类。 然后使用 new 运算符对该类进行实例化。 在为新对象分配内存…...

[react]redux异步处理和重写useDispatch

异步代码 import { createAsyncThunk, createSlice } from reduxjs/toolkit; import { getBanner } from ../http/request; import store from /store; export const fetchBanner createAsyncThunk(recommend/banners,async (args, thunkAPI) > {const response await ge…...

基础数据结构---栈

顺序表实现 一、栈类的声明 栈是一种特殊的线性表&#xff0c;可以由顺序表来实现&#xff0c;也可以由链表来实现&#xff0c;这节课&#xff0c;我们采用顺序表来实现栈。 #include <iostream>#include <stdexcept>using namespace std;template<typename …...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成&#xff1a;MAC头部frame bodyFCS&#xff0c;其中MAC是固定格式的&#xff0c;frame body是可变长度。 MAC头部有frame control&#xff0c;duration&#xff0c;address1&#xff0c;address2&#xff0c;addre…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

Rust 开发环境搭建

环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行&#xff1a; rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu ​ 2、Hello World fn main() { println…...