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

张量分解(3)——CP分解

🍅 写在前面
👨‍🎓 博主介绍:大家好,这里是hyk写算法了吗,一枚致力于学习算法和人工智能领域的小菜鸟。
🔎个人主页:主页链接(欢迎各位大佬光临指导)
⭐️近期专栏:机器学习与深度学习
                       LeetCode算法实例
                       张量分解

张量分析系列知识,详见下方链接:

张量分解(1)——初探张量

张量分解(2)——张量运算

张量分解(3)——CP分解
本系列文章主要参考论文:Tensor Decompositions and Applications∗

目录

  • CP分解综述
  • CP分解公式
  • CP分解优化

CP分解综述

有了前两节基础内容的铺垫,本节开始学习张量分解的第一大方法:CANDECOMP/PARAFAC decomposition(CP分解)。
CP分解概念:将一个高维度的张量分解为几个核的总和,每个核都是多个向量的外积得到,实际上这里的“核”也就是上一节所提到的“Rank-one tensors”(详情可点击本文开头链接查看)。通过分解,可以大大降低参数的数量和复杂程度。张量分解目前都只是近似分解,无法做到完全复原回原张量。
下面是一个三维张量进行CP分解的示例图:
在这里插入图片描述
这里的X就是待分解的三维张量,约等号后方就是多个核相加的格式。a、b、c就是各个维度上的一维张量(向量),由它们构成每个核。
我们可以明显观察到,一个高维度张量可以被分解为多个Rank-one tensor的和的形式。

CP分解公式

这里以三维张量X∈R(I×J×K)为例,CP分解可以简单表示为:
在这里插入图片描述
而公式中,参数通常需要归一化,就额外加入了另一个参数λ,公式为:
在这里插入图片描述

当然三维张量不能代替所有张量,下面给出了高维张量CP分解的通用公式:
在这里插入图片描述

这里也可以将张量转化为矩阵形式,将张量X矩阵化。至于如何转化,可以看上一节张量运算中的Khatri-Rao product,公式为:
在这里插入图片描述
这里的A、B、C是每个核在不同方向上分量的集合,如A就是a1,a2,a3…的总和;B就是[b1、b2…bn]。X(1)、X(2)、X(3)是张量X在不同维度上的分量矩阵。

CP分解优化

CP分解优化也就是如何计算CP分解,使得我们在已有基本形式的基础之上,增加分解后的相似度。
这里讲解一个常用的方法:交替最小二乘法ALS(the alternating least squares)
同样以三维张量X为例,我们的优化目标是:
在这里插入图片描述
其中,X为已知的张量,X尖为待优化的参数,已经被分解成向量外积的形式。
这里的优化方法是:先固定B , C优化A;接着固定A , C 优化B;固定A , B优化C;然后继续迭代,直到达到终止条件(达到迭代次数或者损失不再降低等)。对于参数A,完整的优化过程如图所示:
在这里插入图片描述
流程中的公式变形以及一些细节,具体可以查看前两节文章,这里不再仔细解释。
B、C同理,不断迭代即可。
完整的n维tensor交替最小二乘法优化CP分解参数的过程如下图:
在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Kindling-OriginX 在快手 Staging 环境的异常诊断效果分享
  • 如何切换手机的ip地址
  • 怎么搭建微信商城
  • 【代码随想录算法训练营第六十四天|卡码网47.参加科学大会、94.城市间货物运输I】
  • 少年时期的黑客天才
  • 电焰灶:烹饪性能的深度剖析
  • Spring中常见知识点及使用
  • leetcode300:最长递增子序列
  • 如何使用nestjs生成一个新的控制器
  • 【区块链 + 智慧政务】一体化政务数据底座平台 | FISCO BCOS应用案例
  • 算法——二分法
  • 懂点技术就可以做,适合程序员的一种生意思路|在FlowUs记录成长 发布知识库
  • 什么是数据挖掘(python)
  • 防火墙(ensp USG6000v)---安全策略 + 用户认证综合实验
  • redis的setnx实现分布式锁
  • (三)从jvm层面了解线程的启动和停止
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • ECS应用管理最佳实践
  • ES6系统学习----从Apollo Client看解构赋值
  • JSONP原理
  • k个最大的数及变种小结
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • Objective-C 中关联引用的概念
  • Python 基础起步 (十) 什么叫函数?
  • Python语法速览与机器学习开发环境搭建
  • spring + angular 实现导出excel
  • SSH 免密登录
  • swift基础之_对象 实例方法 对象方法。
  • uni-app项目数字滚动
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • Xmanager 远程桌面 CentOS 7
  • 设计模式(12)迭代器模式(讲解+应用)
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • ​什么是bug?bug的源头在哪里?
  • # windows 运行框输入mrt提示错误:Windows 找不到文件‘mrt‘。请确定文件名是否正确后,再试一次
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #{}和${}的区别?
  • (web自动化测试+python)1
  • (二)Eureka服务搭建,服务注册,服务发现
  • (二)构建dubbo分布式平台-平台功能导图
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (四)汇编语言——简单程序
  • (转)【Hibernate总结系列】使用举例
  • (转)LINQ之路
  • .bashrc在哪里,alias妙用
  • .NET C# 使用GDAL读取FileGDB要素类
  • .NET CLR基本术语
  • .NET 表达式计算:Expression Evaluator
  • .NET 分布式技术比较
  • .net 后台导出excel ,word
  • .NET 中的轻量级线程安全
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .net6 webapi log4net完整配置使用流程