(二)实值函数相对于向量的梯度

1、定义

以n维向量 x x 为变元的实标量函数f(x)相对于 x x 的梯度结果为n*1列向量,定义为

xf(x)=[f(x)x1f(x)x2f(x)xn]=[f(x)x1,f(x)x2,...,f(x)xn]T=f(x)x

其中, x x 默认为列向量,xT默认为行向量。

2、拓展定义

2.1 实标量函数 f(x) f ( x ) 相对于1*n行向量 xT x T 的梯度结果为1*n行向量,定义为

f(x)xT=[f(x)x1,f(x)x2,...,f(x)xn]=xTf(x) ∂ f ( x ) ∂ x T = [ ∂ f ( x ) ∂ x 1 , ∂ f ( x ) ∂ x 2 , . . . , ∂ f ( x ) ∂ x n ] = ▽ x T f ( x )

2.2 m维行向量函数 f(x)=[f1(x),f2(x),,fm(x)] f ( x ) = [ f 1 ( x ) , f 2 ( x ) , … , f m ( x ) ] 相对n维实向量 x x (x默认是列向量)的梯度为一 nm n ∗ m 矩阵,定义为

f(x)x=f1(x)x1f1(x)x2f1(x)xnf2(x)x1f2(x)x2f2(x)xn.........fm(x)x1fm(x)x2fm(x)xn=xf(x) ∂ f ( x ) ∂ x = [ ∂ f 1 ( x ) ∂ x 1 ∂ f 2 ( x ) ∂ x 1 . . . ∂ f m ( x ) ∂ x 1 ∂ f 1 ( x ) ∂ x 2 ∂ f 2 ( x ) ∂ x 2 . . . ∂ f m ( x ) ∂ x 2 ⋮ ⋮ ⋮ ∂ f 1 ( x ) ∂ x n ∂ f 2 ( x ) ∂ x n . . . ∂ f m ( x ) ∂ x n ] = ▽ x f ( x )

两个特例:
(1)若m*1向量函数 f(x)=y=[y1,y2,,ym]T f ( x ) = y = [ y 1 , y 2 , … , y m ] T ,其中 y1,y2,,ym y 1 , y 2 , … , y m 是向量的标量函数。则一阶梯度
yxT=y1x1y2x1ymx1y1x2y2x2ymx2.........y1xny2xnymxn ∂ y ∂ x T = [ ∂ y 1 ∂ x 1 ∂ y 1 ∂ x 2 . . . ∂ y 1 ∂ x n ∂ y 2 ∂ x 1 ∂ y 2 ∂ x 2 . . . ∂ y 2 ∂ x n ⋮ ⋮ ⋮ ∂ y m ∂ x 1 ∂ y m ∂ x 2 . . . ∂ y m ∂ x n ]

是一个 mn m ∗ n 矩阵,称为 向量函数 y=[y1,y2,...,ym]T y = [ y 1 , y 2 , . . . , y m ] T Jacobi矩阵
(2)若 f(x)=[x1,x2,...,xn] f ( x ) = [ x 1 , x 2 , . . . , x n ] ,则
xTx=I=f(x)xI ∂ x T ∂ x = I = ∂ f ( x ) ∂ x ( I 是 单 位 矩 阵 )

例如:
x=[x1,x2,x3]T x = [ x 1 , x 2 , x 3 ] T ,则 xT=[x1,x2,x3] x T = [ x 1 , x 2 , x 3 ] ,所以
xTx=x1x1x1x2x1x3x2x1x2x2x2x3x3x1x3x2x3x3=100010001=I ∂ x T ∂ x = [ ∂ x 1 ∂ x 1 ∂ x 2 ∂ x 1 ∂ x 3 ∂ x 1 ∂ x 1 ∂ x 2 ∂ x 2 ∂ x 2 ∂ x 3 ∂ x 2 ∂ x 1 ∂ x 3 ∂ x 2 ∂ x 3 ∂ x 3 ∂ x 3 ] = [ 1 0 0 0 1 0 0 0 1 ] = I

公式 xTx=II ∂ x T ∂ x = I ( I 是 单 位 矩 阵 ) 非常有用

3、导出的基本公式

A A y均与向量 x x 无关,有

(1)xTAyx=xTxAy=Ay

(2) yTAxx=ATy ∂ y T A x ∂ x = A T y

(3) xTAxx=Ax+ATx ∂ x T A x ∂ x = A x + A T x

(4) xTAxx=2Ax(A,) ∂ x T A x ∂ x = 2 A x ( A 为 对 称 矩 阵 , 转 置 矩 阵 等 于 本 身 )

注:矩阵的转置

(AT)T=A ( A T ) T = A

(A+B)T=AT+BT ( A + B ) T = A T + B T

(λA)T=λAT ( λ A ) T = λ A T

(AB)T=BTAT ( A B ) T = B T A T

参考
[1]《矩阵分析与运用》第5章
[2]《线性代数》第二版

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
梯度下降法(Gradient Descent)是一种常用的优化算法,常用于机器学习中的参数求解。在 MATLAB 中,可以通过以下步骤实现梯度下降法: 1. 定义代价函数(Cost Function):代价函数梯度下降法的核心,它是根据训练数据和模型参数计算出来的一个值,用来评估模型的好坏。在 MATLAB 中,可以定义一个函数来表示代价函数,例如: ```matlab function J = cost_function(X, y, theta) m = length(y); J = sum((X * theta - y).^2) / (2 * m); end ``` 其中,X 是训练数据的特征矩阵,y 是训练数据的目标值向量,theta 是模型参数向量,m 是训练数据的样本数量。 2. 定义梯度函数(Gradient Function):梯度函数是代价函数的偏导数,它表示代价函数对于每个模型参数的变化率。在 MATLAB 中,可以定义一个函数来表示梯度函数,例如: ```matlab function grad = gradient_function(X, y, theta) m = length(y); grad = X' * (X * theta - y) / m; end ``` 其中,X 是训练数据的特征矩阵,y 是训练数据的目标值向量,theta 是模型参数向量,m 是训练数据的样本数量。 3. 初始化模型参数:在使用梯度下降法求解模型参数之前,需要先对模型参数进行初始化,通常可以将模型参数设置为 0 或者一个较小的随机数。例如: ```matlab theta = randn(size(X, 2), 1); ``` 其中,size(X, 2) 表示特征矩阵 X 的第维大小,即特征数量。 4. 迭代更新模型参数:使用梯度下降法求解模型参数的核心是迭代更新模型参数,直到满足停止条件。在每次迭代中,需要计算代价函数梯度函数,然后根据学习率和梯度方向更新模型参数。例如: ```matlab alpha = 0.01; % 学习率 max_iter = 1000; % 最大迭代次数 epsilon = 1e-5; % 停止条件 for i = 1:max_iter J = cost_function(X, y, theta); grad = gradient_function(X, y, theta); theta = theta - alpha * grad; if norm(grad) < epsilon % 判断是否满足停止条件 break; end end ``` 其中,alpha 是学习率,max_iter 是最大迭代次数,epsilon 是停止条件,norm(grad) 表示梯度向量的 L2 范数。 5. 预测:使用训练好的模型参数来预测新的数据。例如: ```matlab y_pred = X_test * theta; ``` 其中,X_test 是测试数据的特征矩阵,y_pred 是预测值向量。 以上就是使用 MATLAB 实现梯度下降法的基本步骤。需要注意的是,在实际应用中,为了提高收敛速度和稳定性,通常会使用一些优化技巧,如学习率调整、批量梯度下降、随机梯度下降等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值