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

相关文章
|
1天前
|
机器学习/深度学习 人工智能 算法
揭秘深度学习中的优化算法
【4月更文挑战第24天】 在深度学习的广阔天地中,优化算法扮演着至关重要的角色。本文将深入探讨几种主流的优化算法,包括梯度下降法、随机梯度下降法、Adam等,并分析它们的特点和适用场景。我们将通过理论分析和实例演示,揭示这些优化算法如何帮助模型更高效地学习参数,从而提高模型的性能。
|
7天前
|
算法
代码随想录算法训练营第六十天 | LeetCode 84. 柱状图中最大的矩形
代码随想录算法训练营第六十天 | LeetCode 84. 柱状图中最大的矩形
18 3
|
7天前
|
算法
代码随想录算法训练营第五十七天 | LeetCode 739. 每日温度、496. 下一个更大元素 I
代码随想录算法训练营第五十七天 | LeetCode 739. 每日温度、496. 下一个更大元素 I
11 3
|
7天前
|
算法
代码随想录算法训练营第五十六天 | LeetCode 647. 回文子串、516. 最长回文子序列、动态规划总结
代码随想录算法训练营第五十六天 | LeetCode 647. 回文子串、516. 最长回文子序列、动态规划总结
28 1
|
10天前
|
算法
R语言使用随机技术差分进化算法优化的Nelson-Siegel-Svensson模型
R语言使用随机技术差分进化算法优化的Nelson-Siegel-Svensson模型
20 0
|
1月前
|
传感器 算法 计算机视觉
基于肤色模型和中值滤波的手部检测算法FPGA实现,包括tb测试文件和MATLAB辅助验证
该内容是关于一个基于肤色模型和中值滤波的手部检测算法的描述,包括算法的运行效果图和所使用的软件版本(matlab2022a, vivado2019.2)。算法分为肤色分割和中值滤波两步,其中肤色模型在YCbCr色彩空间定义,中值滤波用于去除噪声。提供了一段核心程序代码,用于处理图像数据并在FPGA上实现。最终,检测结果输出到"hand.txt"文件。
|
1月前
|
机器学习/深度学习 算法 计算机视觉
基于yolov2深度学习网络的视频手部检测算法matlab仿真
基于yolov2深度学习网络的视频手部检测算法matlab仿真
|
1月前
|
算法
【MATLAB】语音信号识别与处理:移动中位数滤波算法去噪及谱相减算法呈现频谱
【MATLAB】语音信号识别与处理:移动中位数滤波算法去噪及谱相减算法呈现频谱
23 2
|
1月前
|
算法
【MATLAB】语音信号识别与处理:一维信号NLM非局部均值滤波算法去噪及谱相减算法呈现频谱
【MATLAB】语音信号识别与处理:一维信号NLM非局部均值滤波算法去噪及谱相减算法呈现频谱
40 1
|
5天前
|
机器学习/深度学习 人工智能 算法
基于DCT和扩频的音频水印嵌入提取算法matlab仿真
本文介绍了结合DCT和扩频技术的音频水印算法,用于在不降低音质的情况下嵌入版权信息。在matlab2022a中实现,算法利用DCT进行频域处理,通过扩频增强水印的隐蔽性和抗攻击性。核心程序展示了水印的嵌入与提取过程,包括DCT变换、水印扩频及反变换步骤。该方法有效且专业,未来研究将侧重于提高实用性和安全性。