DL之DNN优化技术:神经网络算法简介之GD/SGD算法的简介、代码实现、代码调参之详细攻略(一)

简介: DL之DNN优化技术:神经网络算法简介之GD/SGD算法的简介、代码实现、代码调参之详细攻略

目录


GD算法的简介


GD/SGD算法的代码实现


1、Matlab编程实现


GD算法的改进算法


GD算法中的超参数




GD算法的简介

     GD算法,是求解非线性无约束优化问题的基本方法,最小化损失函数的一种常用的一阶优化方法。如图所示,找出最陡峭的方向作为下山的方向。

image.png

image.png


1、如何求梯度?

image.png

沿着梯度方向,函数值下降最快。


2、二元曲面

image.png


具有两个输入权重的线性神经元的误差曲面,Error surface of a linear neuron with two input weights


3、GD算法容易陷入局部最小值

image.png



GD/SGD算法的代码实现


1、Matlab编程实现


%% 最速下降法图示

% 设置步长为0.1,f_change为改变前后的y值变化,仅设置了一个退出条件。

syms x;f=x^2;

step=0.1;x=2;k=0;         %设置步长,初始值,迭代记录数

f_change=x^2;             %初始化差值

f_current=x^2;            %计算当前函数值

ezplot(@(x,f)f-x.^2)       %画出函数图像

axis([-2,2,-0.2,3])       %固定坐标轴

hold on

while f_change>0.000000001                %设置条件,两次计算的值之差小于某个数,跳出循环

   x=x-step*2*x;                         %-2*x为梯度反方向,step为步长,!最速下降法!

   f_change = f_current - x^2;           %计算两次函数值之差

   f_current = x^2 ;                     %重新计算当前的函数值

   plot(x,f_current,'ro','markersize',7) %标记当前的位置

   drawnow;pause(0.2);

   k=k+1;

end

hold off

fprintf('在迭代%d次后找到函数最小值为%e,对应的x值为%e\n',k,x^2,x)

2、基于python实现SGD算法


class SGD:

   def __init__(self, lr=0.01):

       self.lr = lr  #学习率,实例变量

 

   #update()方法,在SGD中会被反复调用

   def update(self, params, grads):

       for key in params.keys():

           params[key] -= self.lr * grads[key]  #参数params、grads依旧是字典型变量,按params['W1']、grads['W1']的形式,分别保存了权重参数和它们的梯度。

 

'伪代码:神经网络的参数的更新'  

network = TwoLayerNet(...)

optimizer = SGD()

for i in range(10000):

   ...

   x_batch, t_batch = get_mini_batch(...) # mini-batch

   grads = network.gradient(x_batch, t_batch)

   params = network.params

   optimiz



GD算法的改进算法


1、SGD算法

(1)、mini-batch

如果不是每拿到一个样本即更改梯度,而是若干个样本的平均梯度作为更新方向,则是mini-batch梯度下降算法。




(1)、SGD与学习率、Rate、Loss






 

————————————————

版权声明:本文为CSDN博主「一个处女座的程序猿」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qq_41185868/article/details/79152752

相关文章
|
7月前
|
机器学习/深度学习 算法 机器人
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
649 0
|
7月前
|
机器学习/深度学习 算法 机器人
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
319 8
|
7月前
|
机器学习/深度学习 算法 自动驾驶
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
362 8
|
机器学习/深度学习 算法 PyTorch
OpenCV-图像着色(采用DNN模块导入深度学习模型)
OpenCV-图像着色(采用DNN模块导入深度学习模型)
554 0
来自OpenCv的DNN模块助力图像分类任务
来自OpenCv的DNN模块助力图像分类任务
377 0
来自OpenCv的DNN模块助力图像分类任务
|
机器学习/深度学习 数据库 SQL
|
机器学习/深度学习
DNN 模块MVP 模式学习中的一些问题
为了让View部分可以测试,我们使用interface来分离View和业务逻辑的耦合。 我的问题是: Q:对于在aspx.design.cs中声明的控件,我们也需要在interface中声明吗?如果要声明,那么在aspx.design.cs中的控件声明是不是就是interface的实现? 我们不能在interface直接声明跟aspx.design.cs控件同名的变量,我们应该认为aspx.design.cs中的控件就是view的一部分,我们无法控制。
595 0
|
机器学习/深度学习 前端开发
介绍一些免费的DNN模块
Administration Advanced Control Panel Free fully featured ajax enabled control panel replacement for Dot...
978 0
|
机器学习/深度学习
DNN模块调试的一点小技巧
有时候模块出错只是出现这样的错误提示: A critical error has occurred. object reference not set to an instance of an object. 这样的错误提示是毫无价值的,那如何得到有价值的错误提示信息呢?可以使用我之前提高的DNN调试利器DNNDebug.aspx--如何调试出错信息不具体的程序错误就可以解决问题。
833 0
|
机器学习/深度学习 SEO
介绍几个DNN SEO模块,可免费试用的
iFinity Url Master - Get the best SEO results by taking control of your DNN urls iFinity Tagger - Tag your DNN content and create specific, target...
750 0