矩阵微分

矩阵微分

定义

对于一个函数 f:Rm×nR ,从 m×n 的矩阵映射到一个实数,那么 f 关于A的梯度可以定义为:

Af(A)=fA11fAm1fA13fAmn

所以梯度 Af(A) 本身也是一个 m×n 的矩阵。
例如,
A=[A11A21A12A22]
为一个 2×2 的矩阵,函数 f:R2×2R
f(A)=32A11+5A212+A21A22

那么,记 Aij A 的第(i,j)个元素,则
Af(A)=32A2210A12A21

矩阵的迹

对一个 n×n 的方阵, A 的迹为其对角线上的元素之和:

trA=i=1mAii

性质

  • 如果 a 为一个实数,则tra=a
  • 如果矩阵 A B的乘积为方阵,则 trAB=trBA 。这可以推广到更一般的情况:
    trABC=trCAB=trBCA

    trABCD=trDABC=trCDAB=trBCDA
  • 如果矩阵 A B同为方阵, a 为实数,则:
    trA=trAT

    tr(A+B)=trA+trB

    traA=atrA
  • 通过简单推导出可以得到矩阵的迹的梯度:
    AtrAB=BT

    Af(A)=(Af(A))T

    AtrABATC=CAB+CTABT

    A|A|=|A|(A1)T

    上面最后一式中, A 为非奇异方阵,|A| A 的行列式的值。

例子

假设X=[x(1),x(2),,x(m)],其中, x(i)Rn×1 为一个训练样本。 y=[y(1),y(2),,y(m)] ,其中, y(i)R 为训练样本的值。
那么损失函数可以记为:

J(θ)=12(θXy)(θXy)T

现在求解损失函数的梯度,
θJ(θ)=θ[12(θXy)(θXy)T]=12θ(θXXTθθXyTyXTθT+yyT)=12θ(θXXTθθXyT)θ(θXyT)=12(θXXT+θXXT)yXT=θXXTyXT

可得, θ=yXT(XXT)1

linearRegressionTrain.m

function [linearRegressionModel] = linearRegressionTrain(inputData, labels, options)
% linearRegressionTrain Train a linear Regression model  on the given
% data. Returns softmaxOptTheta, a vector containing the trained parameters
% for the model.
%
% inputData: an N by M matrix containing the input data, such that
%            inputData(:, c) is the cth input
% labels: M by 1 matrix containing the value labels for the
%            corresponding inputs. labels(c) is the value label for
%            the cth input
% options (optional): options
% options.maxIter: number of iterations to train for

if ~exist('options', 'var')
    options = struct;
end

if ~isfield(options, 'pinv')
    options.pinv = true;
end


[row, col] = size(inputData);
inputData = [ones(1, col); inputData];

if options.pinv
    theta = (labels * inputData') * pinv(inputData * inputData');
else
    theta = (labels * inputData') * inv(inputData * inputData');
end

 % Fold softmaxOptTheta into a nicer format
linearRegressionModel.optTheta = theta;
linearRegressionModel.numSample = col;
linearRegressionModel.numDim = row;                         
end

linearRegressionPredict.m

function [pred] = linearRegressionPredict(linearRegressionModel, data)

% linearRegressionModel - model trained using linearRegressionTrain
% data - the N x M input matrix, where each column data(:, i) corresponds to
%        a single test set
%
% This code produces the prediction matrix 
% pred, where pred(i) is the ith pred.


theta = linearRegressionModel.optTheta; % the parameters from theta

pred = theta * [ones(1, size(data, 2)); data];
%  pred= max(peed_temp);

% ---------------------------------------------------------------------

end

参考文献

[1] http://cs229.stanford.edu/notes/cs229-notes1.pdf

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值