“高效的隐私保护的张量分解方法研究”学习笔记(下)

隐私保护的基于张量链的高效 Tucker 分解方法是对基于梯度下降的 Tucker 分解算法的改进,同时保证在云端或雾端进行运算时不泄露用户的隐私数据。

隐私保护的基于张量链的高效 Tucker 分解方法包括系统初始化与用户数据加密、隐私保护的基于张量链的高效 Tucker 分解计算两部分。系统初始化与用户数据加密的流程同上篇博客,此处便不再赘述。

基于梯度下降的 Tucker 分解算法

三阶张量 T ‾ ∈ R I 1 × I 2 × I 3 \underline{T} \in R^{I_{1} \times I_{2} \times I_{3}} TRI1×I2×I3 的 Tucker 分解:

T ‾ = C ‾ × 1 U 1 × 2 U 2 × 3 U 3 \underline{T}=\underline{C} \times{ }_{1} U_{1} \times{ }_{2} U_{2} \times{ }_{3} U_{3} T=C×1U1×2U2×3U3

其中 U 1 ∈ R I 1 × R 1 , U 2 ∈ R I 2 × R 2 , U 3 ∈ R I 3 × R 3 U_{1} \in R^{I_{1} \times R_{1}}, \quad U_{2} \in R^{I_{2} \times R_{2}}, \quad U_{3} \in R^{I_{3} \times R_{3}} U1RI1×R1,U2RI2×R2,U3RI3×R3 为三个不同阶上的因子矩阵, C ‾ ∈ R R 1 × R 2 × R 3 \underline{C} \in R^{R_{1} \times R_{2} \times R_{3}} CRR1×R2×R3 为核心张量。

构造损失函数

L ( U 1 , U 2 , U 3 , C ‾ ) = 1 2 ∥ T − C ‾ × 1 U 1 × 2 U 2 × 3 U 3 ∥ F 2 L\left(U_{1}, U_{2}, U_{3}, \underline{C}\right)=\frac{1}{2}\left\|T-\underline{C} \times{ }_{1} U_{1} \times{ }_{2} U_{2} \times{ }_{3} U_{3}\right\|_{F}^{2} L(U1,U2,U3,C)=21TC×1U1×2U2×3U3F2

对每个变量求导可以得到:
在这里插入图片描述
这上面一大串是什么?看不懂啊!我也不会::>_<::
在我请教了实验室的师兄之后,嘻嘻,我弄明白啦o()o

先解释一下这些符号代表什么意思:
t i 1 i 2 i 3 \boldsymbol{t}_{i_{1} i_{2} i_{3}} ti1i2i3表示原张量 T T T 中的一个数,是已知的;
u i 1 : ( 1 ) u_{i_{1}:}^{(1)} ui1:(1) 中下标就 i 1 i_1 i1 是指某一阶,上标(1)是指因子矩阵 U 1 U_1 U1,它是为了避免后面进行伪代码说明时混淆因子矩阵而进行标记的,不参与计算实际的计算;
× m n \boldsymbol\times_{m}^{n} ×mn 表示前面张量的第 n 阶和后面张量的第 m 阶做单模乘运算。

接下来就可以进行公式的解释了。已知损失函数 L ( U 1 , U 2 , U 3 , C ‾ ) = 1 2 ∥ T − C ‾ × 1 U 1 × 2 U 2 × 3 U 3 ∥ F 2 L\left(U_{1}, U_{2}, U_{3}, \underline{C}\right)=\frac{1}{2}\left\|T-\underline{C} \times{ }_{1} U_{1} \times{ }_{2} U_{2} \times{ }_{3} U_{3}\right\|_{F}^{2} L(U1,U2,U3,C)=21TC×1U1×2U2×3U3F2,利用我们高数里面学过的求偏导的方法对因子矩阵 U 1 U_1 U1 i 1 i_1 i1 维度求导:
在这里插入图片描述
同理,利用求偏导的方法对因子矩阵 U 2 U_2 U2 i 2 i_2 i2 维度、因子矩阵 U 3 U_3 U3 i 3 i_3 i3 维度求导:
在这里插入图片描述
利用求偏导的方法对核心张量求导:
在这里插入图片描述

在迭代过程中,不断最小化该损失函数,直至损失函数达到最小值时,我们认为 U 1 , U 2 , U 3 , C ‾ U_{1}, U_{2}, U_{3}, \underline{C} U1,U2,U3,C 满足公式 T ‾ ≈ C ‾ × 1 U 1 × 2 U 2 × 3 U 3 \underline{T} \approx \underline{C} \times{ }_{1} U_{1} \times{ }_{2} U_{2} \times{ }_{3} U_{3} TC×1U1×2U2×3U3

基于梯度下降的 Tucker 分解算法

输入:张量 T ‾ ∈ R I 1 × I 2 × I 3 \underline{T} \in R^{I_{1} \times I_{2} \times I_{3}} TRI1×I2×I3,误差阈值 ε \varepsilon ε,最大迭代次数  Iter  max  \text { Iter }_{\text {max }}  Iter max 

输出:核心张量 C ‾ ∈ R R 1 × R 2 × R 3 \underline{C} \in R^{R_{1} \times R_{2} \times R_{3}} CRR1×R2×R3,低秩矩阵 U 1 ∈ R I 1 × R 1 , U 2 ∈ R I 2 × R 2 , U 3 ∈ R I 3 × R 3 U_{1} \in R^{I_{1} \times R_{1}}, \quad U_{2} \in R^{I_{2} \times R_{2}}, \quad U_{3} \in R^{I_{3} \times R_{3}} U1RI1×R1,U2RI2×R2,U3RI3×R3
在这里插入图片描述在这里插入图片描述
基于梯度下降的 Tucker 分解算法可以较好地拟合 Tucker 分解结果,但在进行更新操作与求导操作时,算法需要遍历张量对象中的所有元素,这会消耗大量的计算时间。考虑对该部分进行优化,于是基于张量链的高效 Tucker 分解算法就被提出。

基于张量链的高效 Tucker 分解算法

通过对算法进行分析我们发现,由于张量对象通常含有大量元素,同时基于梯度下降的 Tucker 分解算法的内层迭代需要遍历张量中的所有元素,所以整个算法的运行时间较长,难以满足某些对时间要求较高的场景。

如何减少数据的存储量和计算过程中内层求导所需要遍历的元素个数?

我们知道,当张量以 TT 形式表示时,如果该张量的 TT 秩比较小,那么该张量的 TT 形 式比原始张量所占用的空间小很多,结合张量的 TT 表示形式,论文提出一个基于张量链的高效 Tucker 分解方法。

一个三阶张量 T ‾ ∈ R I 1 × I 2 × I 3 \underline{T} \in R^{I_{1} \times I_{2} \times I_{3}} TRI1×I2×I3 分解为核心张量 C ‾ ∈ R R 1 × R 2 × R 3 \underline{C} \in R^{R_{1} \times R_{2} \times R_{3}} CRR1×R2×R3 和三个因子矩阵 U 1 ∈ R I 1 × R 1 , U 2 ∈ R I 2 × R 2 , U 3 ∈ R I 3 × R 3 U_{1} \in R^{I_{1} \times R_{1}}, \quad U_{2} \in R^{I_{2} \times R_{2}}, \quad U_{3} \in R^{I_{3} \times R_{3}} U1RI1×R1,U2RI2×R2,U3RI3×R3,通常情况下 Tucker 分解后的结果存在 I 1 ≫ R 1 , I 2 ≫ R 2 , I 3 ≫ R 3 I_{1} \gg R_{1}, I_{2} \gg R_{2}, \quad I_{3} \gg R_{3} I1R1,I2R2,I3R3

因此,我们可以沿 I 1 , I 2  和  I 3 I_{1}, I_{2} \text { 和 } I_{3} I1,I2  I3 对传统的 Tucker 分解结果做降维升阶操作,得到:
T = C × 1 1 U ‾ 1 × 1 2 U ‾ 2 × 1 3 U ‾ 3 T=C \times_{1}^{1} \underline{U}_{1} \times{ }_{1}^{2} \underline{U}_{2} \times{ }_{1}^{3} \underline{U}_{3} T=C×11U1×12U2×13U3

U ‾ 1 、 U ‾ 2 、 U ‾ 3  分别为矩阵  U 1  、  U 2  、  U 3  降维升阶后所对应的张量  \underline{U}_{1} 、 \underline{U}_{2} 、 \underline{U}_{3} \text { 分别为矩阵 } U_{1} \text { 、 } U_{2} \text { 、 } U_{3} \text { 降维升阶后所对应的张量 } U1U2U3 分别为矩阵 U1  U2  U3 降维升阶后所对应的张量 

对降维升阶得到的张量 U 1 U_1 U1 U 2 U_2 U2 U 3 U_3 U3 分别做张量链分解操作:

U ˉ 1 = U 1 ( 1 ) × 1 U 1 ( 2 ) × 1 U 1 ( 3 ) × 1 U 1 ( 4 ) \bar{U}_{1}=U_{1}^{(1)} \times_{1} U_{1}^{(2)} \times_{1} U_{1}^{(3)} \times_{1} U_{1}^{(4)} Uˉ1=U1(1)×1U1(2)×1U1(3)×1U1(4)

U ˉ 2 = U 2 ( 1 ) × 1 U 2 ( 2 ) × 1 U 2 ( 3 ) × 1 U 2 ( 4 ) \bar{U}_{2}=U_{2}^{(1)} \times_{1} U_{2}^{(2)} \times_{1} U_{2}^{(3)} \times_{1} U_{2}^{(4)} Uˉ2=U2(1)×1U2(2)×1U2(3)×1U2(4)

U ˉ 3 = U 3 ( 1 ) × 1 U 3 ( 2 ) × 1 U 3 ( 3 ) × 1 U 3 ( 4 ) \bar{U}_{3}=U_{3}^{(1)} \times_{1} U_{3}^{(2)} \times_{1} U_{3}^{(3)} \times_{1} U_{3}^{(4)} Uˉ3=U3(1)×1U3(2)×1U3(3)×1U3(4)

其中,  公式中U  i ( j )  表示第  i  个张量链  U ˉ i  的第  j  个核  \text { 公式中U }_{i}^{(j)} \text { 表示第 } i \text { 个张量链 } \bar{U}_{i} \text { 的第 } j \text { 个核 }  公式中i(j) 表示第 i 个张量链 Uˉi 的第 j 个核 

过程如下图所示:

在这里插入图片描述
在这里插入图片描述
通过以上两个步骤,我们将传统的 Tucker 分解形式转化为新的基于张量链的 Tucker 分解形式,大大减少了分解形式中的元素个数。

对于下面即将出现的内容希望各位小伙伴不要被吓到(反正当时我被吓到了),耐住性子看下去。
在这里插入图片描述

基于张量链的高效 Tucker 分解算法构造出如下损失函数:
L = 1 2 ∥ T − C ‾ × 1 1 U ˉ 1 × 1 2 U ˉ 2 × 1 3 U ˉ 3 ∥ F 2 = 1 2 ∥ T − C ‾ × 1 1 ( U 1 ( 1 ) × 1 U 1 ( 2 ) × 1 U 1 ( 3 ) × 1 U 1 ( 4 ) ) × 1 2 ( U 2 ( 1 ) × 1 U 2 ( 2 ) × 1 U 2 ( 3 ) × 1 U 2 ( 4 ) ) × 1 3 ( U 3 ( 1 ) × 1 U 3 ( 2 ) × 1 U 3 ( 3 ) × 1 U 3 ( 4 ) ) ∥ F 2 \begin{aligned} L=& \frac{1}{2}\left\|T-\underline{C} \times{ }_{1}^{1} \bar{U}_{1} \times{ }_{1}^{2} \bar{U}_{2} \times{ }_{1}^{3} \bar{U}_{3}\right\|_{F}^{2} \\ =& \frac{1}{2} \| T-\underline{C} \times{ }_{1}^{1}\left(U_{1}^{(1)} \times{ }_{1} U_{1}^{(2)} \times{ }_{1} U_{1}^{(3)} \times{ }_{1} U_{1}^{(4)}\right)\times{ }_{1}^{2}\left(U_{2}^{(1)} \times{ }_{1} U_{2}^{(2)} \times{ }_{1} U_{2}^{(3)} \times{ }_{1} U_{2}^{(4)}\right)\times{ }_{1}^{3}\left(U_{3}^{(1)} \times{ }_{1} U_{3}^{(2)} \times{ }_{1} U_{3}^{(3)} \times{ }_{1} U_{3}^{(4)}\right) \|_{F}^{2} \end{aligned} L==21TC×11Uˉ1×12Uˉ2×13Uˉ3F221TC×11(U1(1)×1U1(2)×1U1(3)×1U1(4))×12(U2(1)×1U2(2)×1U2(3)×1U2(4))×13(U3(1)×1U3(2)×1U3(3)×1U3(4))F2

对第一个张量各个核进行求导,可以得到导数:
在这里插入图片描述
同理可以对第二、三个张量各个核求导,可以得到导数:
在这里插入图片描述
对C进行求导:
在这里插入图片描述
其中 U i ( k − ) U_{i}^{(k-)} Ui(k) 表示第 i i i 个张量链 U i U_i Ui 的前 k-1 个核做约减乘运算, U i ( k + ) U_{i}^{(k+)} Ui(k+) 表示第 i i i 个张量链 U i U_i Ui 的第 k 个核之后做约减乘运算。

基于张量链的高效 Tucker 分解算法

输入:张量 T ‾ ∈ R I 1 × I 2 × ⋯ × I N \underline{T} \in R^{I_{1} \times I_{2}\times\dots \times I_{N}} TRI1×I2××IN,误差阈值 ε \varepsilon ε,最大迭代次数  Iter  max  \text { Iter }_{\text {max }}  Iter max 
核心张量 C ‾ \underline{C} C的维度 R 1 , R 2 , ⋯   , R N R_{1}, R_{2}, \cdots, R_{N} R1,R2,,RN
张量链核的个数 c 1 , c 2 , ⋯   , c N c_{1}, c_{2}, \cdots, c_{N} c1,c2,,cN
s升阶后 T ‾ \underline{T} T的维度 I 11 × I 12 × ⋯ × I 1 ( q 1 − 1 ) × I 21 × I 22 × ⋯ × I 2 ( c 2 − 1 ) × ⋯ × I N 1 × I N 2 × ⋯ × I N ( c N − 1 ) I_{11} \times I_{12} \times \cdots \times I_{1\left(q_{1}-1\right)} \times I_{21} \times I_{22} \times \cdots \times I_{2\left(c_{2}-1\right)} \times \cdots \times I_{N 1} \times I_{N 2} \times \cdots \times I_{N\left(c_{N}-1\right)} I11×I12××I1(q11)×I21×I22××I2(c21)××IN1×IN2××IN(cN1)
张量链核间秩 r 11 , r 12 , ⋯   , r 1 ( c 1 − 1 ) , r 21 , r 22 , ⋯   , r 2 ( c 2 − 1 ) , ⋯   , r N 1 , r N 2 , ⋯   , r N ( c N − 1 ) r_{11}, r_{12}, \cdots, r_{1\left(c_{1}-1\right)}, r_{21}, r_{22}, \cdots, r_{2\left(c_{2}-1\right)}, \cdots, r_{N 1}, r_{N 2}, \cdots, r_{N\left(c_{N}-1\right)} r11,r12,,r1(c11),r21,r22,,r2(c21),,rN1,rN2,,rN(cN1)

输出:核心张量 C ‾ ∈ R R 1 × R 2 × ⋯ × R N , N \underline{C} \in R^{R_{1} \times R_{2} \times \cdots \times R_{N}}, \quad \mathrm{N} CRR1×R2××RN,N个低秩张量链 U ˉ 1 , U ˉ 2 , ⋯ U ˉ N \bar{U}_{1},\bar{U}_{2}, \cdots \bar{U}_{N} Uˉ1,Uˉ2,UˉN,其中每个张量链 U ˉ k = U k ( 1 ) × 1 U k ( 2 ) × k ⋯ × 1 U k ( c k ) \bar{U}_{k}=U_{k}^{(1)} \times_{1} U_{k}^{(2)} \times_{k} \cdots \times_{1} U_{k}^{\left(c_{k}\right)} Uˉk=Uk(1)×1Uk(2)×k×1Uk(ck)
在这里插入图片描述
在这里插入图片描述

隐私保护的基于张量链的高效 Tucker 分解算法

同 PPHOBL 方案一样,隐私保护的基于张量链的高效 Tucker 分解算法的计算结果应该近似等于明文状态下基于张量链的高效 Tucker 分解算法的计 算结果。隐私保护的基于张量链的高效 Tucker 分解中的两个关键方法:
(1) 用户上传的加密张量与同态加密张量之间的相互转换;
(2)隐私保护的基于张量链的 高效 Tucker 分解。

其中用户上传的加密张量与同态加密张量之间的相互转换同上篇博客中所述方法一样,由云端与雾端节点协同配合完成,在此不再赘述。
在这里插入图片描述

隐私保护的基于张量链的高效 Tucker 分解算法

输入:张量 T ‾ ∈ R I 1 × I 2 × ⋯ × I N \underline{T} \in R^{I_{1} \times I_{2}\times\dots \times I_{N}} TRI1×I2××IN,误差阈值 ε \varepsilon ε,最大迭代次数  Iter  max  \text { Iter }_{\text {max }}  Iter max 
核心张量 C ‾ \underline{C} C的维度 R 1 , R 2 , ⋯   , R N R_{1}, R_{2}, \cdots, R_{N} R1,R2,,RN
张量链核的个数 c 1 , c 2 , ⋯   , c N c_{1}, c_{2}, \cdots, c_{N} c1,c2,,cN
s升阶后 T ‾ \underline{T} T的维度 I 11 × I 12 × ⋯ × I 1 ( q 1 − 1 ) × I 21 × I 22 × ⋯ × I 2 ( c 2 − 1 ) × ⋯ × I N 1 × I N 2 × ⋯ × I N ( c N − 1 ) I_{11} \times I_{12} \times \cdots \times I_{1\left(q_{1}-1\right)} \times I_{21} \times I_{22} \times \cdots \times I_{2\left(c_{2}-1\right)} \times \cdots \times I_{N 1} \times I_{N 2} \times \cdots \times I_{N\left(c_{N}-1\right)} I11×I12××I1(q11)×I21×I22××I2(c21)××IN1×IN2××IN(cN1)
张量链核间秩 r 11 , r 12 , ⋯   , r 1 ( c 1 − 1 ) , r 21 , r 22 , ⋯   , r 2 ( c 2 − 1 ) , ⋯   , r N 1 , r N 2 , ⋯   , r N ( c N − 1 ) r_{11}, r_{12}, \cdots, r_{1\left(c_{1}-1\right)}, r_{21}, r_{22}, \cdots, r_{2\left(c_{2}-1\right)}, \cdots, r_{N 1}, r_{N 2}, \cdots, r_{N\left(c_{N}-1\right)} r11,r12,,r1(c11),r21,r22,,r2(c21),,rN1,rN2,,rN(cN1)

输出:核心张量 [ ∣ C ∣ ] ‾ ∈ R R 1 × R 2 × ⋯ × R N , N \underline{[|C|]} \in R^{R_{1} \times R_{2} \times \cdots \times R_{N}}, \quad \mathrm{N} [C]RR1×R2××RN,N个低秩张量链 [ ∣ U ∣ ] ˉ 1 , [ ∣ U ∣ ] ˉ 2 , ⋯ [ ∣ U ∣ ] ˉ N \bar{[|U|]}_{1},\bar{[|U|]}_{2}, \cdots \bar{[|U|]}_{N} [U]ˉ1,[U]ˉ2,[U]ˉN,其中每个张量链 [ ∣ U ∣ ] ˉ k = [ ∣ U ∣ ] k ( 1 ) × 1 [ ∣ U ∣ ] k ( 2 ) × k ⋯ × 1 [ ∣ U ∣ ] k ( c k ) \bar{[|U|]}_{k}=[|U|]_{k}^{(1)} \times_{1} [|U|]_{k}^{(2)} \times_{k} \cdots \times_{1} [|U|]_{k}^{\left(c_{k}\right)} [U]ˉk=[U]k(1)×1[U]k(2)×k×1[U]k(ck)
在这里插入图片描述在这里插入图片描述在这里插入图片描述
“高效的隐私保护的张量分解方法研究”学习笔记到此主要内容已经介绍完毕,看看我这个小菜菜什么时候可以用代码复现吧!
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值