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

【矩阵微分】在不涉及张量的前提下计算矩阵对向量的导数并写出二阶泰勒展开

本篇内容摘自CMU 16-745最优控制的第10讲 “Nonlinear Trajectory Optimization”。

如何在不涉及张量运算的前提下,计算矩阵对向量的导数并写出二阶泰勒展开

在多维微积分中,计算矩阵对向量的导数和二阶泰勒展开是一项重要的任务。本文将介绍如何在不涉及张量运算的前提下,完成该导数计算。

1. 导数计算的背景和动机

在许多工程问题中,我们需要计算一个矩阵函数对一个向量变量的导数,这些导数在求解优化问题过程中非常重要。但是矩阵对向量的求导结果,是一个三维张量。这导致在不具有张量运算知识的情况下很难进行数学推导和代码编写。

为了避免复杂的张量运算,我们可以利用矩阵的向量化和克罗内克积等技巧,简化计算过程。主要思想是将矩阵对向量的导数(这是一个张量)转换为向量对向量的导数(这是一个矩阵)。然后通过“Vec技巧”,使得求得的矩阵可以用于泰勒展开式或其他数学推导中,作为张量的代替。

1.1. 克罗内克积(Kronecker Product)

克罗内克积是一种用于计算多维数组(如矩阵)的运算。假设 A ∈ R l × m \mathbf{A} \in \mathbb{R}^{l \times m} ARl×m B ∈ R n × p \mathbf{B} \in \mathbb{R}^{n \times p} BRn×p,则它们的克罗内克积定义为:

A ⊗ B = [ a 11 B ⋯ a 1 m B ⋮ ⋱ ⋮ a l 1 B ⋯ a l m B ] ∈ R l n × m p . \mathbf{A} \otimes \mathbf{B} = \begin{bmatrix} a_{11} \mathbf{B} & \cdots & a_{1m} \mathbf{B} \\ \vdots & \ddots & \vdots \\ a_{l1} \mathbf{B} & \cdots & a_{lm} \mathbf{B} \end{bmatrix} \in \mathbb{R}^{ln \times mp}. AB= a11Bal1Ba1mBalmB Rln×mp.

1.2. 向量化操作符(Vectorization Operator)

向量化操作符用于将矩阵转换为向量。假设:

A = [ a 1 a 2 ⋯ a m ] ∈ R l × m . \mathbf{A} = \begin{bmatrix} \mathbf{a}_1 & \mathbf{a}_2 & \cdots & \mathbf{a}_m \end{bmatrix} \in \mathbb{R}^{l \times m}. A=[a1a2am]Rl×m.

向量化操作符定义为:

vec ( A ) = [ a 1 a 2 ⋮ a m ] ∈ R l m × 1 . \text{vec}(\mathbf{A}) = \begin{bmatrix} \mathbf{a}_1 \\ \mathbf{a}_2 \\ \vdots \\ \mathbf{a}_m \end{bmatrix} \in \mathbb{R}^{lm \times 1}. vec(A)= a1a2am Rlm×1.

2. Vec技巧

Vec技巧是利用向量化和克罗内克积简化矩阵导数计算的一个方法。具体公式如下:
vec ( A B C ) = ( C ⊤ ⊗ A ) vec ( B ) . \text{vec}(\mathbf{A}\mathbf{B}\mathbf{C}) = (\mathbf{C}^{\top} \otimes \mathbf{A}) \text{vec}(\mathbf{B}). vec(ABC)=(CA)vec(B).

对于两个矩阵 A \mathbf{A} A B \mathbf{B} B,可以进一步简化为:
vec ( A B ) = ( B ⊤ ⊗ I ) vec ( A ) = ( I ⊗ A ) vec ( B ) . \text{vec}(\mathbf{A}\mathbf{B}) = (\mathbf{B}^{\top} \otimes \mathbf{I}) \text{vec}(\mathbf{A}) = (\mathbf{I} \otimes \mathbf{A}) \text{vec}(\mathbf{B}). vec(AB)=(BI)vec(A)=(IA)vec(B).

引入该技巧后,这使得我们可以通过向量化操作计算矩阵对向量的导数。考虑到记号简明性,在未加说明的情况下,我们将“向量化后的矩阵对向量的导数”来指代“矩阵对向量的导数”:
∂ A ( x ) ∂ x = ∂ vec ( A ( x ) ) ∂ x ∈ R l m × n . \frac{\partial \mathbf{A}(\mathbf{x})}{\partial \mathbf{x}} = \frac{\partial \text{vec}(\mathbf{A}(\mathbf{x}))}{\partial \mathbf{x}} \in \mathbb{R}^{lm \times n}. xA(x)=xvec(A(x))Rlm×n.

3. 应用于二阶泰勒展开

通过上述技巧,我们可以计算出二阶泰勒展开的结果。设 A = ∂ f ∂ x \mathbf{A} = \frac{\partial \mathbf{f}}{\partial \mathbf{x}} A=xf,则二阶导数为:
∂ ∂ x ( vec ( I A Δ x ) ) = ( Δ x ⊤ ⊗ I ) ∂ vec ( A ) ∂ x . \frac{\partial}{\partial\mathbf{x}}\left(\text{vec}\left(\mathbf{I}\mathbf{A}\Delta \mathbf{x}\right)\right) = \left(\Delta \mathbf{x}^{\top} \otimes \mathbf{I}\right) \frac{\partial \text{vec}(\mathbf{A})}{\partial \mathbf{x}}. x(vec(IAΔx))=(ΔxI)xvec(A).

最终,我们得到二阶泰勒展开式:
f ( x + Δ x ) = f ( x ) + A Δ x + 1 2 ( Δ x ⊤ ⊗ I ) ∂ vec ( A ) ∂ x Δ x . \mathbf{f}(\mathbf{x}+\Delta \mathbf{x}) = \mathbf{f}(\mathbf{x}) + \mathbf{A} \Delta \mathbf{x} + \frac{1}{2} \left(\Delta \mathbf{x}^{\top} \otimes \mathbf{I}\right) \frac{\partial \text{vec}(\mathbf{A})}{\partial \mathbf{x}} \Delta \mathbf{x}. f(x+Δx)=f(x)+AΔx+21(ΔxI)xvec(A)Δx.

这样对于接下来的数学推导或者代码编写都带来了便利。

在某些情况下,我们需要对转置矩阵求导,此时可以使用换位矩阵(commutator matrix) T \mathbf{T} T,满足 T vec ( A ) = vec ( A ⊤ ) \mathbf{T}\text{vec}(\mathbf{A}) = \text{vec}(\mathbf{A}^{\top}) Tvec(A)=vec(A)。公式如下:
∂ ∂ x ( A ⊤ ( x ) B ) = ( B ⊤ ⊗ I ) T ∂ A ∂ x . \frac{\partial }{\partial \mathbf{x}}(\mathbf{A}^{\top}(\mathbf{x}) \mathbf{B}) = (\mathbf{B}^{\top} \otimes \mathbf{I}) \mathbf{T}\frac{\partial \mathbf{A}}{\partial \mathbf{x}}. x(A(x)B)=(BI)TxA.

相关文章:

【矩阵微分】在不涉及张量的前提下计算矩阵对向量的导数并写出二阶泰勒展开

本篇内容摘自CMU 16-745最优控制的第10讲 “Nonlinear Trajectory Optimization”。 如何在不涉及张量运算的前提下,计算矩阵对向量的导数并写出二阶泰勒展开 在多维微积分中,计算矩阵对向量的导数和二阶泰勒展开是一项重要的任务。本文将介绍如何在不涉…...

数据结构之判断平衡二叉树详解与示例(C,C++)

文章目录 AVL树定义节点定义计算高度获取平衡因子判断是否为平衡二叉树完整示例代码结论 在计算机科学中,二叉树是一种非常重要的数据结构。它们被广泛用于多种算法中,如排序、查找等。然而,普通的二叉树在极端情况下可能退化成链表&#xff…...

深入解析仓颉编程语言:函数式编程的核心特性

摘要 仓颉编程语言以其独特的语法和功能,为开发者提供了强大的编程工具。本文将深入探讨仓颉语言中的嵌套函数、Lambda 表达式和闭包等函数式编程的核心特性,帮助开发者更好地理解和利用这些工具。 引言 在现代编程语言中,函数式编程范式越…...

springboot惠农服务平台-计算机毕业设计源码50601

目录 1 绪论 1.1 研究背景 1.2研究意义 1.3论文结构与章节安排 2 惠农服务平台app 系统分析 2.1 可行性分析 2.2 系统功能分析 2.3 系统用例分析 2.4 系统流程分析 2.5本章小结 3 惠农服务平台app 总体设计 3.1 系统功能模块设计 3.2 数据库设计 表access_token (…...

Lua脚本简单理解

目录 1.安装 2.语法 2.1Lua数据类型 2.2变量 2.3lua循环 2.4流程控制 2.5函数 2.6运算符 2.7关系运算符 3.lua脚本在redis中的使用 3.1lua脚本再redis简单编写 3.2普通锁Lua脚本 3.3可重入锁lua脚本 1.安装 centos安装 安装指令: yum -y update yum i…...

AutoSAR自适应平台架构总览--AP的初认识

AutoSAR自适应平台架构总览:AP 基础设施层(Foundation Layer)核心操作系统(Core OS)通信管理(Communication Management) 服务层(Services Layer)诊断服务(Diagnostics S…...

GPT-4o Mini:探索最具成本效益的小模型在软件开发中的应用

随着人工智能技术的迅猛发展,自然语言处理(NLP)领域也取得了显著的进步。OpenAI 最新发布的 GPT-4o Mini 模型,以其卓越的性能和极具竞争力的价格,成为了广大开发者关注的焦点。作为一名长期关注人工智能及其在软件开发…...

{Spring Boot 原理篇} Spring Boot自动装配原理

SpringBootApplication 1,Spring Boot 应用启动,SpringBootApplication标注的类就是启动类,它去实现配置类中的Bean的自动装配 SpringBootApplication public class SpringbootRedis01Application {public static void main(String[] args)…...

QEMU源码全解析 —— CPU虚拟化(10)

接前一篇文章: 本文内容参考: 《趣谈Linux操作系统》 —— 刘超,极客时间 《QEMU/KVM》源码解析与应用 —— 李强,机械工业出版社 《深度探索Linux系统虚拟化原理与实现》—— 王柏生 谢广军, 机械工业出版社 特此致谢! 二、x86架构CPU虚拟化 3. VMX 上一回讲解了支…...

46、PHP实现矩阵中的路径

题目: PHP实现矩阵中的路径 描述: 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。 路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向…...

c++笔记2

目录 2.2 栈底(bottom) } 大数乘大数 节点:包含一个数据元素及若干指向子树分支的信息 。 节点的度:一个节点拥有子树的数目称为节点的度 。 叶子节点:也称为终端节点,没有子树的节点或者度为零的节点…...

通过Lua脚本手写redis分布式锁

1、手写 Redis 分布式锁,包括上锁、解锁、自动续期。 此功能实现采用 Lua脚本实现,Lua脚本可以保证原子性。 setnx可以实现分布式锁,但是无法实现可重入锁,所以用hset来代替setnx实现可重入的分布式锁。 -- lock if redis.call…...

解析银行个人征信系统

银行个人征信系统,也被称为个人信用信息基础数据库或金融信用信息基础数据库,是我国社会信用体系的重要基础设施。该系统由中国人民银行组织国内相关金融机构建立,旨在依法采集、整理、保存、加工自然人(法人)及其他组…...

AttributeError: ‘list‘ object has no attribute ‘text‘

AttributeError: ‘list‘ object has no attribute ‘text‘ 目录 AttributeError: ‘list‘ object has no attribute ‘text‘ 【常见模块错误】 【解决方案】 示例代码 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英…...

Codeforces Round 874 (Div. 3)(A~D题)

A. Musical Puzzle 思路: 用最少的长度为2的字符串按一定规则拼出s。规则是&#xff1a;前一个字符串的尾与后一个字符串的首相同。统计s中长度为2的不同字符串数量。 代码: #include<bits/stdc.h> #include <unordered_map> using namespace std; #define N 20…...

[Python][基础语法]详细讲解

目录 1.顺序语句2.条件语句3.缩进和代码块4.空语句 pass5.循环语句1.while2.for3.continue4.break ∞.积累 1.顺序语句 默认情况下&#xff0c;Python的代码执行顺序是按照从上到下的顺序&#xff0c;依次执行# 输出结果&#xff1a;"123" print("1") pri…...

Layui---输入事件

输入实时监听 //监听表单单选框复选框选择 form.on(radio, function (data) {console.log(data.value); //得到被选中的值 });//监听表单下拉菜单选择form.on(select, function (data) //监听表单下拉菜单选择form.on(select, function (data) ​ //监听表单复选框选择form.…...

甄选范文“论软件测试中缺陷管理及其应用”软考高级论文,系统架构设计师论文

论文真题 软件缺陷指的是计算机软件或程序中存在的某种破坏正常运行能力的问题、错误,或者隐藏的功能缺陷。缺陷的存在会导致软件产品在某种程度上不能满足用户的需要。在目前的软件开发过程中,缺陷是不可避免的。软件测试是发现缺陷的主要手段,其核心目标就是尽可能多地找…...

spring框架实现滑动验证码功能

spring框架实现滑动验证码功能 1. 整体描述2. 具体实现2.1 滑动验证码实体类2.2 滑动验证码登录VO2.3 滑动验证码接口返回类2.4 滑动验证码工具类2.5 滑动验证码Service2.6 滑动验证码Controller 3 工程源码4 总结 1. 整体描述 之前项目需要在验证码模块&#xff0c;增加滑动验…...

Pytorch使用教学8-张量的科学运算

在介绍完PyTorch中的广播运算后&#xff0c;继续为大家介绍PyTorch的内置数学运算&#xff1a; 首先对内置函数有一个功能印象&#xff0c;知道它的存在&#xff0c;使用时再查具体怎么用其次&#xff0c;我还会介绍PyTorch科学运算的注意事项与一些实用小技巧 1 基本数学运算…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

Python训练营-Day26-函数专题1:函数定义与参数

题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一个名为 calculate_circle_area 的函数&#xff0c;该函数接收圆的半径 radius 作为参数&#xff0c;并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求&#xff1a;函数接收一个位置参数 radi…...

【Qt】控件 QWidget

控件 QWidget 一. 控件概述二. QWidget 的核心属性可用状态&#xff1a;enabled几何&#xff1a;geometrywindows frame 窗口框架的影响 窗口标题&#xff1a;windowTitle窗口图标&#xff1a;windowIconqrc 机制 窗口不透明度&#xff1a;windowOpacity光标&#xff1a;cursor…...

盲盒一番赏小程序:引领盲盒新潮流

在盲盒市场日益火爆的今天&#xff0c;如何才能在众多盲盒产品中脱颖而出&#xff1f;盲盒一番赏小程序给出了答案&#xff0c;它以创新的玩法和优质的服务&#xff0c;引领着盲盒新潮流。 一番赏小程序的最大特色在于其独特的赏品分级制度。赏品分为多个等级&#xff0c;从普…...