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

相关文章
|
2天前
|
算法
基于大爆炸优化算法的PID控制器参数寻优matlab仿真
本研究基于大爆炸优化算法对PID控制器参数进行寻优,并通过Matlab仿真对比优化前后PID控制效果。使用MATLAB2022a实现核心程序,展示了算法迭代过程及最优PID参数的求解。大爆炸优化算法通过模拟宇宙大爆炸和大收缩过程,在搜索空间中迭代寻找全局最优解,特别适用于PID参数优化,提升控制系统性能。
|
8天前
|
存储 关系型数据库 分布式数据库
PolarDB的PolarStore存储引擎以其高效的索引结构、优化的数据压缩算法、出色的事务处理能力著称
PolarDB的PolarStore存储引擎以其高效的索引结构、优化的数据压缩算法、出色的事务处理能力著称。本文深入解析PolarStore的内部机制及优化策略,包括合理调整索引、优化数据分布、控制事务规模等,旨在最大化其性能优势,提升数据存储与访问效率。
20 5
|
23天前
|
算法 调度
基于遗传模拟退火混合优化算法的车间作业最优调度matlab仿真,输出甘特图
车间作业调度问题(JSSP)通过遗传算法(GA)和模拟退火算法(SA)优化多个作业在并行工作中心上的加工顺序和时间,以最小化总完成时间和机器闲置时间。MATLAB2022a版本运行测试,展示了有效性和可行性。核心程序采用作业列表表示法,结合遗传操作和模拟退火过程,提高算法性能。
|
23天前
|
人工智能 算法 大数据
Linux内核中的调度算法演变:从O(1)到CFS的优化之旅###
本文深入探讨了Linux操作系统内核中进程调度算法的发展历程,聚焦于O(1)调度器向完全公平调度器(CFS)的转变。不同于传统摘要对研究背景、方法、结果和结论的概述,本文创新性地采用“技术演进时间线”的形式,简明扼要地勾勒出这一转变背后的关键技术里程碑,旨在为读者提供一个清晰的历史脉络,引领其深入了解Linux调度机制的革新之路。 ###
|
23天前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
|
6月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【从零开始学习深度学习】26.卷积神经网络之AlexNet模型介绍及其Pytorch实现【含完整代码】
【从零开始学习深度学习】26.卷积神经网络之AlexNet模型介绍及其Pytorch实现【含完整代码】
|
6月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【从零开始学习深度学习】28.卷积神经网络之NiN模型介绍及其Pytorch实现【含完整代码】
【从零开始学习深度学习】28.卷积神经网络之NiN模型介绍及其Pytorch实现【含完整代码】
|
4月前
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch代码实现神经网络
这段代码示例展示了如何在PyTorch中构建一个基础的卷积神经网络(CNN)。该网络包括两个卷积层,分别用于提取图像特征,每个卷积层后跟一个池化层以降低空间维度;之后是三个全连接层,用于分类输出。此结构适用于图像识别任务,并可根据具体应用调整参数与层数。
|
4月前
|
机器学习/深度学习 数据可视化 Python
如何可视化神经网络的神经元节点之间的连接?附有Python预处理代码
该博客展示了如何通过Python预处理神经网络权重矩阵并将其导出为表格,然后使用Chiplot网站来可视化神经网络的神经元节点之间的连接。
57 0
如何可视化神经网络的神经元节点之间的连接?附有Python预处理代码
|
4月前
|
机器学习/深度学习 Linux TensorFlow
【Tensorflow+keras】用代码给神经网络结构绘图
文章提供了使用TensorFlow和Keras来绘制神经网络结构图的方法,并给出了具体的代码示例。
59 0

热门文章

最新文章