人工智能-优化算法之梯度下降

梯度下降

尽管梯度下降(gradient descent)很少直接用于深度学习, 但了解它是理解下一节随机梯度下降算法的关键。 例如,由于学习率过大,优化问题可能会发散,这种现象早已在梯度下降中出现。 同样地,预处理(preconditioning)是梯度下降中的一种常用技术, 还被沿用到更高级的算法中。 让我们从简单的一维梯度下降开始。

下面我们来展示如何实现梯度下降。为了简单起见,我们选用目标函数f(x)=x^{2}。 尽管我们知道x=0f(x)能取得最小值, 但我们仍然使用这个简单的函数来观察(x)的变化。

%matplotlib inline
from mxnet import np, npx
from d2l import mxnet as d2lnpx.set_np()def f(x):  # 目标函数return x ** 2def f_grad(x):  # 目标函数的梯度(导数)return 2 * x
%matplotlib inline
import numpy as np
import torch
from d2l import torch as d2ldef f(x):  # 目标函数return x ** 2def f_grad(x):  # 目标函数的梯度(导数)return 2 * x
%matplotlib inline
import numpy as np
import tensorflow as tf
from d2l import tensorflow as d2ldef f(x):  # 目标函数return x ** 2def f_grad(x):  # 目标函数的梯度(导数)return 2 * x
%matplotlib inline
import warnings
from d2l import paddle as d2lwarnings.filterwarnings("ignore")
import numpy as np
import paddledef f(x):  # 目标函数return x ** 2def f_grad(x):  # 目标函数的梯度(导数)return 2 * x

接下来,我们使用x=10作为初始值,并假设eta=0.2。 使用梯度下降法迭代\(x\)共10次,我们可以看到,(x)的值最终将接近最优解。

def gd(eta, f_grad):x = 10.0results = [x]for i in range(10):x -= eta * f_grad(x)results.append(float(x))print(f'epoch 10, x: {x:f}')return resultsresults = gd(0.2, f_grad)

 epoch 10, x: 0.060466

def gd(eta, f_grad):x = 10.0results = [x]for i in range(10):x -= eta * f_grad(x)results.append(float(x))print(f'epoch 10, x: {x:f}')return resultsresults = gd(0.2, f_grad)

 epoch 10, x: 0.060466

def gd(eta, f_grad):x = 10.0results = [x]for i in range(10):x -= eta * f_grad(x)results.append(float(x))print(f'epoch 10, x: {x:f}')return resultsresults = gd(0.2, f_grad)

 epoch 10, x: 0.060466

def gd(eta, f_grad):x = 10.0results = [x]for i in range(10):x -= eta * f_grad(x)results.append(float(x))print(f'epoch 10, x: {float(x):f}')return resultsresults = gd(0.2, f_grad)

 epoch 10, x: 0.060466

对进行x优化的过程可以绘制如下:

def show_trace(results, f):n = max(abs(min(results)), abs(max(results)))f_line = np.arange(-n, n, 0.01)d2l.set_figsize()d2l.plot([f_line, results], [[f(x) for x in f_line], [f(x) for x in results]], 'x', 'f(x)', fmts=['-', '-o'])show_trace(results, f)

 [07:12:32] ../src/storage/storage.cc:196: Using Pooled (Naive) StorageManager for CPU

def show_trace(results, f):n = max(abs(min(results)), abs(max(results)))f_line = torch.arange(-n, n, 0.01)d2l.set_figsize()d2l.plot([f_line, results], [[f(x) for x in f_line], [f(x) for x in results]], 'x', 'f(x)', fmts=['-', '-o'])show_trace(results, f)

 

def show_trace(results, f):n = max(abs(min(results)), abs(max(results)))f_line = tf.range(-n, n, 0.01)d2l.set_figsize()d2l.plot([f_line, results], [[f(x) for x in f_line], [f(x) for x in results]], 'x', 'f(x)', fmts=['-', '-o'])show_trace(results, f)

 

def show_trace(results, f):n = max(abs(min(results)), abs(max(results)))f_line = paddle.arange(-n, n, 0.01, dtype='float32')d2l.set_figsize()d2l.plot([f_line, results], [[f(x) for x in f_line], [f(x) for x in results]], 'x', 'f(x)', fmts=['-', '-o'])show_trace(results, f)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/180412.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《微信小程序开发从入门到实战》学习三十四

4.2 云开发JSON数据库 MySQL、Oracle之类的“关系型数据库”。JSON数据库是“非关系型数据库”,没有行表列的概念。 4.2.1 JSON数据库基本概念 集合:一个数据库有多个集合,一个集合存储通常是同一类数据,可看作为JSON数组,数组…

P25 C++ const关键字

前言 本期我们要讲的是 C 中的 const 关键字。 const 在改变生成代码方面做不了什么,它有点像类和结构体的可见性,这是一个机制,可以让我们的代码更加干净,并对开发人员写代码强制特定的规则。 const 就像你做出的承诺&#xf…

王者小游戏

游戏里的经验动物 Bear package beast; import sxt.GameFrame; public class Bear extends Beast {public Bear(int x, int y, GameFrame gameFrame) {super(x, y, gameFrame);setImg("C:\\Users\\辛欣\\OneDrive\\桌面\\王者荣耀图片(1)\\王者荣耀图片\\beast\\bear.jp…

MacBook如何远程控制华为手机?

将手机屏幕投影到电脑上可以提供更大的屏幕空间,方便观看电影、浏览照片、阅读文档等。然而,除了想将手机投屏到电脑,还想要在电脑上直接操作手机,有方法可以实现吗? 现在使用AirDroid Cast的远程控制手机功能就可以实…

【CVE-2023-49103】ownCloud graphapi信息泄露漏洞(2023年11月发布)

漏洞简介 ownCloud owncloud/graphapi 0.2.x在0.2.1之前和0.3.x在0.3.1之前存在漏洞。graphapi应用程序依赖于提供URL的第三方GetPhpInfo.php库。当访问此URL时,会显示PHP环境的配置详细信息(phpinfo)。此信息包括Web服务器的所有环境变量&a…

ArkTS-WebView内嵌H5页面

鸿蒙开发使用WebView内嵌H5页面 访问在线网页时需添加网络权限:ohos.permission.INTERNET module.json5文件配置 {"module" : {"requestPermissions":[{"name": "ohos.permission.INTERNET"}]} }踩坑日记 加载网页效果无法…

C# datagridview控件 绑定数据库中表中数据的方式-3

1.如下图所示,为数据库中的一张表结构,注意该表中共有11个字段 2.首先在窗体后台代码中拖入一个datagridview控件,并在窗体加载时,给datagridview控件添加列,添加的方式如下所示:请注意,每个列…

[操作系统] 面试宝典之~死锁连环系列

文章目录 2.22 什么是死锁2.24 解决死锁的方法死锁的预防死锁的避免死锁的检测死锁的解除 2.22 什么是死锁 在多道程序环境下,多个进程可以竞争有限数量的资源。当一个进程申请资源时,如果这时没有可用资源,那么这个进程进入等待状态。有时&…

项目五 配置与管理磁盘

项目五 配置与管理磁盘 磁盘配额(Quota),磁盘阵列(RAID),逻辑滚动文件系统(LVM) #职业能力目标和要求 1,掌握Linux下的磁盘管理工具的使用方法 2,掌握Linux…

Kafka事务机制:原理和实践

Kafka事务机制:原理和实践 Apache Kafka 是一个分布式流处理平台,广泛用于构建实时数据管道和流应用程序。它不仅以高吞吐量、可扩展性和容错能力著称,还提供了事务支持,以确保数据的完整性和一致性。在这篇博客中,我…

虚拟公户如何让企业节税

近年来,电商行业迅猛发展,对于从事电商会计工作的人来说,加班已经成为家常便饭。随着移动技术的进步,电商与消费者之间的联系越来越紧密。每次购物节后,大家都非常关注天猫企业商家和电商会计如何通过节税来降低成本。…

时尚和美容网站的技术 SEO:提示和最佳实践

如果你对美容和时尚感兴趣,做了一个网站,但不知道如何在上面做技术SEO?此外,时尚和美容网站的技术 SEO 没有任何特别的指南! 我们听到了你的声音!但首先,请记住,技术性SEO不是在一两…

HCIP --- MGRE综合实验

一、总体规划 二、AR1配置思路及步骤 一、接口地址分配及缺省路由&#xff1a; The device is running! AR1&#xff1a; <Huawei>sy Enter system view, return user view with CtrlZ. [Huawei]sy r1 [r1]interface s4/0/0 [r1-Serial4/0/0]ip address 15.0.0.1 255.0…

【Cisco Packet Tracer】DHCP/FTP/WEB/DNS实验

本文使用CiscoPacketTracer仿真软件实现了DHCP/FTP/WEB/DNS实验&#xff0c;拓扑中包含2个客户机和3个服务器&#xff08;DHCP服务器、DNS服务器、FTP/WEB公用一个服务器&#xff09;&#xff0c;客户机的IP地址由DHCP服务器动态分配。 DHCP服务器IP地址&#xff1a;192.168.0…

【Rust】基本的语法概念

Rust初学习 常见概念变量与可变性变量常量隐藏 数据类型标量类型字符类型复合类型元组数组 函数参数语句和表达式具有返回值的函数 注释控制流使用循环重复执行 常见概念 变量与可变性 变量 fn main() {let x 5;println!("The value of x is: {x}");x 6;println…

Apipost也出IDEA插件了?Apipost-Helper!

IDEA是一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;它可以帮助开发人员更加高效地编写、调试和部署软件应用程序。我们在编写完接口代码后需要进行接口调试等操作&#xff0c;一般需要打开额外的调试工具。 今天给大家介绍一款IDEA插件&#xff1a;Api…

国产操作系统-银河麒麟V10

一、介绍 银河麒麟操作系统隶属于麒麟软件&#xff0c;麒麟软件是专业从事国产操作系统研发和产业化的企业&#xff0c;面向通用和专用领域打造安全创新的国产操作系统产品和相应解决方案&#xff0c;旗下拥有银河麒麟、中标麒麟、星光麒麟三大产品品牌。 麒麟软件官方网站地…

Linux处理文件常见命令

目录 1 cp 2 rm 3 zip与unzip 3.1 zip 3.2 unzip 4 cd 5 ls 6 chmod 7 scp 7.1 文件在你操作的机器上&#xff0c;你要传给另一个机器 7.1.1 文件 7.1.2 文件夹 7.2 文件在另一个机器上&#xff0c;你要把文件搞到你操作的机器上 7.2.1 文件 7.2.…

a-range-picker 时间选择器的默认日期显示,日期格式化

效果图 代码 <a-range-picker v-model:value"date" show-time />js代码处理: 前置0&#xff0c;时间格式化 const handleTime (t) > {return t < 10 ? "0" t : t; }; const handleDate (date) > {const year date?.$d.getFullYear()…

不同路径(力扣LeetCode)动态规划

不同路径 题目描述 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 问总共有多少条不同的路径&…