深度学习入门- 梯度(Gradient)(三)
一. 手算梯度
1.计算下列函数的梯度,并写明过程。
理论依据是前面两文学习过的:
链式法则:复合函数的导数可以用构成复合函数的各个函数的导数的乘积表示。
偏导数是多元函数时:将某一个变量定为目标变量,并将其他变量固定为某个值。
根据上述理论,我们先看下手写数学计算过程:
-
step1:求偏导数
F(x1,x2)对x1的偏导数为:
F(x1,x2)对x2的偏导数为:
-
step2:在点(2,3)处求值
将x1=2,x2=3带入上式:
-
step3:形成梯度向量
该函数在点(2,3)处的梯度向量为:
故:以上二元函数在点(2,3)处的梯度向量为(108,144)。
二.绘制梯度3D图
从不同的视角来看梯度:
view(2) 设置默认二维视图 :
view(3) 设置默认三维视图:
附上matlab脚本:
[X1, X2] = meshgrid(-5:0.1:5, -5:0.1:5);
F = (3*X1 + 4*X2).^2;
[GX, GY] = gradient(F);
figure;
surf(X1, X2, F);
hold on;
% 为了绘制梯度场箭头,我们需要遍历网格点
% 但由于梯度箭头可能会非常密集且难以看清,我们可以选择性地绘制一些箭头
step = 5; % 设置步长
for i = 1:step:size(X1,1)
for j = 1:step:size(X1,2)
% 提取当前网格点的坐标和梯度值
x = X1(i,j);
y = X2(i,j);
z = F(i,j);
ux = GX(i,j);
uy = GY(i,j);
% 归一化梯度向量(可选步骤,用于控制箭头长度)
norm_factor = sqrt(ux^2 + uy^2);
if norm_factor ~= 0
ux = ux / norm_factor;
uy = uy / norm_factor;
end
% 设置箭头长度(可以根据需要调整)
arrow_length = 0.5;
% 绘制梯度箭头
quiver3(x, y, z, arrow_length * ux, arrow_length * uy, 0, 'r', 'LineWidth', 0.5);
end
end
xlabel('x1');
ylabel('x2');
zlabel('f(x1, x2)');
title('3D Plot of f(x1, x2) = (3x1 + 4x2)^2 and its Gradient Field');
grid on;
axis tight;
view(3); % 设置视角
hold off;
本文仅为个人学习使用所写。