基于深度矩阵分解的属性表征学习

原文地址:http://blog.csdn.net/hjimce/article/details/50876956

作者:hjimce

一、相关概念

本篇博文主要讲解文献《A deep matrix factorization method for learning attribute representations》。这篇主要借助于深度学习的思想,提出贪婪的半非负矩阵分解SNMF方法,其思想与栈式自编码网络一样的训练方法,首先通过逐层分解作为预分解结果,然后再整体微调训练。因为这篇文献我看到后面,感觉计算量非常大,不是很喜欢这文献,所以我也没有全部细看。

虽然文献一开始讲的是深度半非负矩阵分解,属于线性分解。不过作者对目标优化函数进行了多次进化,同时还结合了半监督约束项,因此到了最后算法基本上就跟神经网络非常类似了(也包含了非线性激活函数映射)。

开始讲解paper前,先学一些基础概念:

(1)矩阵分解简单概述

在机器学习领域,矩阵分解家族是经常遇到的一类算法,如:PCA、K-means、NMF、SNMF、谱聚类、稀疏编码、SVD、白化、ICA等,它们的目标基本上都是对X矩阵进行分解:

X=Z*H

然后不同的算法,采用不同的约束条件(对Z、H进行约束),具体请参考文献《The Advanced Matrix Factorization》。在机器学习中,特征这个词具体是什么东西?如果从矩阵分解的角度来讲的话:

X=Z*H

X是训练样本。矩阵Z根据不同的应用场景,又可以称之为:权值矩阵、基矩阵(如PCA)、字典(如稀疏编码、k-means)、变换矩阵。

矩阵H也称之为:特征矩阵、投影坐标、系数矩阵、编码矩阵(如稀疏编码、k-means)。矩阵分解家族基本上都是无监督学习算法,而所谓的无监督表征学习,说的简单一点就是求解H矩阵。

(2)非负矩阵分解NMF定义

非负矩阵分解定义:给定样本矩阵X=[x1,x2……xn],其中该矩阵的每一列表示一个样本,矩阵的所有元素都是非负的(比如x的每一列是一张图片样本,x中的元素都是非负的),非负矩阵分解的目标就是要对X进行分解,公式如下:

并且分解后的矩阵Z、H都是非负矩阵(矩阵元素都是非负的),其中Z称之为基矩阵,H称之为系数矩阵。

(2)半非负矩阵分解SNMF定义

为了扩展非负矩阵的应用场景,有时候我们的样本矩阵X并不是非负矩阵,于是就有了半非负矩阵:

半非负矩阵只是要求H为非负矩阵,对于数据矩阵X和基矩阵Z并没有要求。这个思想和聚类量化一样,Z的每一列表示聚类中心并不需要做非负约束,H表示特征矩阵,这使得我们可以从原始数据中学习到低维的特征。

二、基础回顾

这一部分先简单复习一下单层的半非负矩阵分解算法。

1、与k-means的关系

半监督非负矩阵分解和k均值聚类很相似。半非负矩阵分解中,我们允许数据矩阵X和因子矩阵Z中的元素可正可负,同时约束H矩阵为非负矩阵:

从聚类的角度来讲,Z=[z1,z2……zn]的每一列就是我们的聚类中心,H的每一列就是我们的编码矢量。如果对半非负矩阵分解,加入约束条件H是行正交矩阵,即H*H^T=I,同时H的每一列只有一个正数,其它的都为0:

半非负矩阵与k均值聚类的区别在于:半非负矩阵分解并没有要求H矩阵的行向量是相互正交的,我们也可以把它看成是软聚类,k-means可以看成是SNMF的特例。

2、半非负矩阵求解算法

目标函数:

我们的目标是求解Z、H,可以采用固定其中的一个,然后更新另外一个变量:

(1)首先固定H矩阵,那么我们就可以求解Z:

其中H+表示H矩阵的伪逆矩阵。

(2)更新H矩阵:

因为我们要求H矩阵是非负矩阵,因此我们就需要采用上面的矩阵进行更新,其中Apos矩阵表示:

Apos表示把矩阵所有负值元素全部置0,剩下的非负矩阵。反之,Aneg就表示负矩阵,也就是矩阵中正的元素全部置0

具体matlab源码实现如下:

    Z = X * pinv(H);%更新Z矩阵A = Z' * X;%求Z的转置乘以XAp = (abs(A)+A)./2;An = (abs(A)-A)./2;B = Z' * Z;%Z^T*ZBp = (abs(B)+B)./2;Bn = (abs(B)-B)./2;H = H .* sqrt((Ap + Bn * H) ./ max(An + Bp * H, eps));%更新H矩阵总公式

三、算法概述

虽然一开始文献讲解的是深度半非负矩阵的分解,不过到了最后算法经过了好几个阶段的进化,结合了非线性激活函数、半监督学习约束,所有到了最后公式基本已经跟最初的半非负矩阵分解区别很大了。文献算法的讲解从多层线性分解-》非线性分解-》半监督非线性分解,进行算法的进化,下面先简单讲解文献的总体思路。

1、第一次进化:深度线性分解

文献首先先提出了深度半非负矩阵分解公式:

这部分需要我们学习的主要是:逐层贪婪分解、整体损失微调。

2、第二次进化:深度非线性分解

因为线性分解不能表达复杂的特征,所以在步骤1的基础上,引入了非线性激活函数:

g表示非线性激活函数,这样就跟神经网络非常相似了。

3、第三次进化:弱监督非线性分解

在步骤2的基础上,加入了约束项,结合先验知识在里面,使得每一层分解的特征矩阵H符合我们所需要的属性(如果没有监督,那么是自动分解X):

也就是引入了约束项Tr(H^T*L*H)。

四、第一次进化——深度线性分解

1、相关描述

OK,终于到了关键部分了。对于SNMF我们的目标是求解一个低维H+矩阵,用于表征原始的数据X。在大部分情况下,我们所要分析的数据X属性是未知的,其包含着多种属性,比如paper所要处理的人脸图片是各种角度、光照、表情、以及不同的人。因此我们采用多层分解,相比于单层的SNMF来说,更能表达出人脸的多种属性。下面是单层分解与多层分解示意图:

文献提出了深度半非负矩阵分解模型,给定数据X我们把它分解层M+1个因子:

这个也可以写成:

通过每一层的分解,每一层提取到的特征Hi,然后我们可以对每一层H实现相应的任务。比如文献示意图如下,其对每一层的H做了k-means聚类,可以聚类出不同的属性。

这个具体可以看一下最上面聚类结果。

2、算法实现

采用类似于栈式自编码网络一样的训练方法,分成逐层预训练、整体微调两个阶段。

(1)预训练阶段

A、把X=Z1*H1,完成第一层分解;

B、对H1继续分解H1=Z2*H2,完成第二层分解;

如此循环下去,把所有的层都进行了预训练。

(2)整体微调。通过最小化损失函数:

这一步通过求解偏导数,然后继续进行梯度下降,具体公式推导看文献。最后的伪代码实现为:

主要分为逐层预分解和整体微调两个阶段。

后面文献还了引入非线性、半监督,因为我感觉计算量越来越大,学到的东西不是很多,所以就没有具体细看后面各种公式的推导。最后文献算法的伪代码为:


个人总结:这篇文献主要是把深度学习的方法,引入矩阵分解中,实现深度无监督表征学习,思想值得我们学习;然而这篇文献的整个过程,感觉完全不考虑计算量,对于学术研究是不错的文献,但是对于工程应用那就……

参考文献:

1、《A deep matrix factorization method for learning attribute representations》

**********************作者:hjimce   时间:2016.3.13  联系QQ:1393852684   原创文章,转载请保留原文地址、作者等信息***************

深度学习(三十一)基于深度矩阵分解的属性表征学习相关推荐

  1. 学习笔记之——基于深度学习的图像超分辨率重建

    最近开展图像超分辨率( Image Super Resolution)方面的研究,做了一些列的调研,并结合本人的理解总结成本博文~(本博文仅用于本人的学习笔记,不做商业用途) 本博文涉及的paper已 ...

  2. 干货!基于神经网络的多粒度图表征学习

    点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 图是建模实体与实体之间关系的常用数据结构.近年来,图数据挖掘引起了学术界和工业界广泛的关注,如分类.聚类等等.然而图相似度学习这一任务却 ...

  3. 学习笔记之——基于深度学习的目标检测算法

    国庆假期闲来无事~又正好打算入门基于深度学习的视觉检测领域,就利用这个时间来写一份学习的博文~本博文主要是本人的学习笔记与调研报告(不涉及商业用途),博文的部分来自我团队的几位成员的调研报告(由于隐私 ...

  4. 深度特征提取方法_基于深度学习的文本数据特征提取方法之Glove和FastText

    作者:Dipanjan (DJ) Sarkar 编译:ronghuaiyang 导读 今天接着昨天的内容,给大家介绍Glove模型和FastText模型,以及得到的词向量如何应用在机器学习任务里. ( ...

  5. 【深度学习实践】基于深度学习的车牌识别(python,车牌检测+车牌识别)

    车牌识别具有广泛的应用前景,基于传统方法的车牌识别效果一般比较差,随着计算机视觉技术的快速发展,深度学习的方法能够更好的完成车牌识别任务. 本文提供了车牌识别方案的部署链接,您可以在网页上体验该模型的 ...

  6. 深度卷积神经网络结构,基于深度卷积神经网络

    深度学习与神经网络有什么区别 深度学习与神经网络关系2017-01-10最近开始学习深度学习,基本上都是zouxy09博主的文章,写的蛮好,很全面,也会根据自己的思路,做下删减,细化. 五.Deep ...

  7. 基于SVD矩阵分解的用户商品推荐(python实现)

    加粗样式## SVD矩阵分解 SVD奇异值分解 优点:简化数据,去除噪声,提高算法的结果 缺点:数据的转换可能难以理解 适用范围:数值性数据 原始数据data,我们把它分解成3个矩阵. 其中 只有对角 ...

  8. 2018-4-15摘录笔记,《网络表征学习前沿与实践》 崔鹏以及《网络表征学习中的基本问题初探》 王啸 崔鹏 朱文武

    1.来源:<网络表征学习前沿与实践>  崔鹏 (1)随着数据的增加以及计算机计算速度的增加,想当然的以为速度快了,数据再多也是可以自己算的,但是若是数据之间存在着复杂的关系,那么处理一个样 ...

  9. Datawhale 6月学习——图神经网络:超大图上的节点表征学习

    前情回顾 图神经网络:图数据表示及应用 图神经网络:消息传递图神经网络 图神经网络:基于GNN的节点表征学习 图神经网络:基于GNN的节点预测任务及边预测任务 1 超大图上的节点表征学习 1.1 简述 ...

最新文章

  1. java观察者模式在spring中的应用_在Spring中使用观察者模式
  2. localstorage本地缓存
  3. Server Host Cannot be null解决方法
  4. C语言 · 单词数统计
  5. Robot Framework自动化测试(一)---第一个脚本
  6. 软件项目管理知识点总结
  7. Problem D: 字符构成的图形
  8. Android卡顿掉帧问题分析之原理篇
  9. WireShark的过滤语法
  10. Android 能让你少走弯路的干货整理
  11. android圆形菜单,android 圆形旋转菜单例子
  12. 圆周角、圆心角、弦、弦心距、弧长、扇形面积
  13. 安卓商城购物车布局案例
  14. The Sandbox 上线 mSAND-MATIC 质押功能
  15. GitHub的raw.githubusercontent.com无法链接
  16. Flutter,SharedPreferences的同步处理,如Android原生般的
  17. 苏大计算机与科学技术学院录取名单,苏州大学各学院(部)已陆续公布2017年硕士研究生拟录取名单...
  18. 完成java课设的经验_课设后的感想
  19. Android Studio使用cmake配置c++开发Admob
  20. 华科计算机学院导师吕新桥,华中科技大学计算机学院导师和科研方向.doc

热门文章

  1. android 网络编程面试题,Android面试题整理
  2. eclipse 初步新建jsp页面笔记
  3. 润乾单查日期特别慢_SQL编写不合理导致历史日志查询特别慢
  4. 天玥运维安全网关_智慧灯杆网关
  5. swiftui 跳转_酷!苹果推出 SwiftUI,提高编程效率
  6. oracle11g 安装报告,[数据库]oracle11g的standby性能分析报告statpack安装_星空网
  7. table中的td内容过长显示为固定长度,多余部分用省略号代替
  8. 关于height、offsetheight、clientheight、scrollheight、innerheight、outerheight的区别
  9. wpf notifyIcon
  10. 用Navicat_SSH 连接数据库服务器