sách gpt4 ăn đã đi

machine-learning - 如何计算协方差的导数/梯度?

In lại Tác giả: Walker 123 更新时间:2023-11-30 08:36:32 27 4
mua khóa gpt4 giày nike

除了数值计算之外,是否有一种快速方法来获取协方差矩阵(我的网络激活)的导数?

我试图将其用作深度神经网络中成本函数中的惩罚项,但为了通过我的层反向传播误差,我需要获得导数。

在Matlab中,如果“a”是第i层的激活矩阵(神经元*样本),“da”是激活函数的导数:

covariance = a * a' / (size(a,2)-1);

到目前为止我已经尝试过:

covarDelta = (da*a' + a*da' ) / (size(a,2)-1);

但奇怪的是,当我导出 aa' 实际上是 aa=a.^2 时,我已经更接近数值计算的梯度(没有意义,但它改进了事情有点):

covarDelta = 2*a/size(a,1); 

但是没有一个是正确的。知道如何近似协方差的导数吗?

编辑:我不使用协方差矩阵本身作为惩罚项,我取其所有元素的平均值并将该数字添加到成本函数中。我使用这种方法是因为我试图提出一个惩罚项,当信号之间总体协方差更大时,该惩罚项会更大。

注意:我的目标是在训练期间最小化信号之间的相似性(我也尝试过惩罚成对的互信息,但也找不到计算其导数的方法)。

编辑2:我最终使用了已接受答案提供的相同导数,但我已将成本项更改为mean(sqrt(x.^2))。这样负协方差和正协方差都会增加惩罚,并且导数是相同的。

câu trả lời hay nhất

biên tập:

假设我们只有一个三维数据点a = [a1 a2 a3]',因为外积矩阵中所有元素的总和a*a' code>相当于(a1+a2+a3)^2的展开,矩阵的均值是(a1+a2+a3)^2/(3*3)。因此在这种情况下,每个维度的导数具有相同的值2*(a1+a2+a3)/(3*3)

对于更多数据点,该术语变为 ((a1+a2+a3)^2+(b1+b2+b3)^2+...)/(3*3),并且数据点 x 的导数为 2*(x1+x2+x3)/(3*3)(每个维度的值相同)。

简单地取平均值可能不适合您的需求,因为它会抵消协方差矩阵中的正值和负值。

目前我没有环境来验证我的答案,错误的地方请指正。

原帖:

通常人们会使用标量值作为成本,而不是(协方差)矩阵。

如果我们将协方差表示为函数cov(x),它接受一个矩阵作为输入并输出一个矩阵。

所以精确导数不是单个矩阵,因为它对输入矩阵每个元素的偏导数都是一个矩阵。

假设输入矩阵 A 的维度为 m*n,则输出矩阵 C 的维度为 m*m。导数 dA/dC 应该是 m*m*m*n 矩阵。请参阅../../../tutorials/MatrixRecipes.pdf了解逐个矩阵微分的详细信息。

关于machine-learning - 如何计算协方差的导数/梯度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35084254/

27 4 0
Walker 123
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress