minΣ(||xi-Xci||^2+ λ||ci||),
约束条件 cii = 0,
其中X是一个形状为d * n的矩阵,C的形状为n * n,xi和ci分别表示X和C的一列。
这里X是已知的,基于X我们希望找到C。
回答:
通常对于这样的损失函数,你需要将其向量化,而不是处理单列:
loss = X - tf.matmul(X, C)loss = tf.reduce_sum(tf.square(loss))reg_loss = tf.reduce_sum(tf.square(C), 0) # 每列的L2损失reg_loss = tf.reduce_sum(tf.sqrt(reg_loss))total_loss = loss + lambd * reg_loss
为了在C的对角线上实现零约束,最好的方法是使用另一个常数lambd2
将其添加到损失中:
reg_loss2 = tf.trace(tf.square(C))total_loss = total_loss + lambd2 * reg_loss2