深度学习入门- 梯度(Gradient)(三)

[复制链接]
发表于 2025-12-20 09:02:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
一. 手算梯度

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脚本:
  1. [X1, X2] = meshgrid(-5:0.1:5, -5:0.1:5);
  2. F = (3*X1 + 4*X2).^2;
  3. [GX, GY] = gradient(F);
  4. figure;
  5. surf(X1, X2, F);
  6. hold on;
  7. % 为了绘制梯度场箭头,我们需要遍历网格点
  8. % 但由于梯度箭头可能会非常密集且难以看清,我们可以选择性地绘制一些箭头
  9. step = 5; % 设置步长
  10. for i = 1:step:size(X1,1)
  11.     for j = 1:step:size(X1,2)
  12.         % 提取当前网格点的坐标和梯度值
  13.         x = X1(i,j);
  14.         y = X2(i,j);
  15.         z = F(i,j);
  16.         ux = GX(i,j);
  17.         uy = GY(i,j);
  18.         % 归一化梯度向量(可选步骤,用于控制箭头长度)
  19.         norm_factor = sqrt(ux^2 + uy^2);
  20.         if norm_factor ~= 0
  21.             ux = ux / norm_factor;
  22.             uy = uy / norm_factor;
  23.         end
  24.         % 设置箭头长度(可以根据需要调整)
  25.         arrow_length = 0.5;
  26.         % 绘制梯度箭头
  27.         quiver3(x, y, z, arrow_length * ux, arrow_length * uy, 0, 'r', 'LineWidth', 0.5);
  28.     end
  29. end
  30. xlabel('x1');
  31. ylabel('x2');
  32. zlabel('f(x1, x2)');
  33. title('3D Plot of f(x1, x2) = (3x1 + 4x2)^2 and its Gradient Field');
  34. grid on;
  35. axis tight;
  36. view(3); % 设置视角
  37. hold off;
复制代码
本文仅为个人学习使用所写。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表