带你学会深度学习之优化算法 - 1

前言

笔者写下此系列文章是希望在复习人工智能相关知识同时为想学此技术的人提供一定帮助。

图源网络,所有者可随时联系笔者删除。

在一个深度学习问题中,我们通常会预先定义一个损失函数。有了损失函数以后,我们就可以使用优化算法试图将其最小化。在优化中,这样的损失函数通常被称作优化问题的目标函数(objective function)。

即,优化算法是非常重要的,它将调整模型内的参数,以最小化或最大化某个函数(loss损失) 。

正文

梯度下降(Gradient Descent)

梯度下降用于找到函数的局部最小值。在深度学习中,该函数通常是损失函数,它衡量模型预测和真实值之间的差异。算法的每一步都需要计算损失函数关于模型参数的梯度(即偏导数),然后按照这个梯度的反方向更新参数,以减少损失函数的值。标准梯度下降法在每一步更新中使用所有训练数据来计算梯度,因此它也被称为批量梯度下降(Batch Gradient Descent)。

  • θ 是模型参数。
  • α 是学习率,控制步长的大小。
  • J(θ) 是损失函数。
  • ∇θ​J(θ) 是损失函数关于参数 θ 的梯度。

示例代码如下

def gradient_descent(X, y, theta, learning_rate, iterations):m = len(y) for _ in range(iterations):predictions = X.dot(theta)errors = predictions - ygradient = X.T.dot(errors) / mtheta -= learning_rate * gradientreturn theta

随机梯度下降(Stochastic Gradient Descent, SGD)

与梯度下降每次迭代使用所有数据不同,随机梯度下降每次仅使用一个训练样本来计算梯度和更新参数。这种方法显著降低了每次迭代的计算成本,使得算法能够更快地收敛。然而,由于每次更新只基于一个样本,这可能会导致参数更新过程中出现较大的波动,使得损失函数的减少路径较为崎岖,而不是平滑下降。

def stochastic_gradient_descent(X, y, theta, learning_rate, iterations):m = len(y)for _ in range(iterations):for i in range(m):random_index = np.random.randint(m)xi = X[random_index:random_index+1]yi = y[random_index:random_index+1]predictions = xi.dot(theta)errors = predictions - yigradients = xi.T.dot(errors)theta -= learning_rate * gradientsreturn theta

小批量随机梯度下降(Mini-batch Gradient Descent)

小批量随机梯度下降是上述两种方法的折衷方案。它不是使用全部数据或单个数据进行参数更新,而是选取一小批量(mini-batch)的样本来进行每次迭代。这种方法结合了批量梯度下降的减少波动性和随机梯度下降的计算效率的优点。小批量的大小通常是2的幂次,如32、64或128等,这是为了利用现代计算库对特定大小数组的优化。

def mini_batch_gradient_descent(X, y, theta, learning_rate, iterations, batch_size):m = len(y)for _ in range(iterations):shuffled_indices = np.random.permutation(m)X_shuffled = X[shuffled_indices]y_shuffled = y[shuffled_indices]for i in range(0, m, batch_size):xi = X_shuffled[i:i+batch_size]yi = y_shuffled[i:i+batch_size]predictions = xi.dot(theta)errors = predictions - yigradients = xi.T.dot(errors) / batch_sizetheta -= learning_rate * gradientsreturn theta

动量法(Momentum)

动量法在面对小批量数据或是非凸优化问题时表现出较好的效率和更快的收敛速度。动量法的灵感来自物理学中的动量概念,即物体运动时会因为其质量和速度而保持运动状态。在优化算法中,引入动量可以帮助算法在正确的方向上加速收敛,并减少震荡。

计算当前梯度(与SGD相同),然后更新动量向量

使用该动量向量更新参数

  • vt​ 是当前时刻的动量向量。
  • vt−1​ 是上一时刻的动量向量。
  • β 是动量衰减系数,通常设置为0.9或类似的值。
  • η 是学习率。
  • ∇θ​J(θ) 是损失函数相对于参数 θ 的梯度。
def momentum_gradient_descent(X, y, theta, learning_rate, iterations, beta):m = len(y)v = np.zeros(theta.shape)for _ in range(iterations):gradient = X.T.dot(X.dot(theta) - y) / mv = beta * v + learning_rate * gradienttheta -= vreturn theta

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

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

相关文章

电脑上的几篇文章急需注音怎么办?一键批量注音的办法

在现代教育中,汉字注音是一项重要的任务。无论是为了帮助学生更好地学习汉字,还是为了制作教学材料,批量注音都是不可或缺的一步。然而,手动为每一个汉字注音是一项繁琐且耗时的任务。因此,掌握批量注音的方法显得尤为…

[计算机效率] 文件同步工具:FreeFileSync

3.8 文件同步工具:FreeFileSync 非常有用的一款免费文件同步软件。如果两处各自有一个相同的文件夹,但是里面的文件有一些不同。比如,一个是U盘里的,一个是本地电脑磁盘里的文件夹。这样,本地电脑磁盘里的文件夹内容由…

Linux 设备树: of_property_match_string 的用法与工作原理

前言 当前新版本的 Linux 内核 设备驱动框架,与设备树(Device Tree)结合密切,整体 设备树的设备驱动框架,比较的庞大,但又非常的经典。 一个个的 设备树解析函数,都是前人【智慧】的结晶&#…

【Linux实践室】Linux用户管理实战指南:用户密码管理操作详解

🌈个人主页:聆风吟_ 🔥系列专栏:Linux实践室、网络奇遇记 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 一. ⛳️任务描述二. ⛳️相关知识2.1 🔔用户密码存放地及方式2.2 🔔使用…

Windows上实现iOS APP自动化测试:tidevice + WDA + airtest!

环境准备 本文使用的环境如下: Python 3.7.6,Python版本需要3.6 tidevice0.4.14 WebDriverAgent airtest1.2.2 iOS 设备:iPhone12 Windows系统版本:Windows 10 家庭中文版 使用USB连接设备,检测tidevice是否安…

vue项目使用eletron将打包成桌面应用(.exe)

vue项目使用eletron将打包成桌面应用(.exe) 1.前期准备 两个项目: 1、自己用vue cli创建的项目 2、第二个是去gitee将案例clone下来 案例地址 https://gitee.com/qingplus/electron-quick-start.git 2、测试案例是否可以正常运行 # 进入项目 cd electron-quick-…

python初级2条件与循环笔记

两个课堂小练习: 1、(计算圆柱体的体积) 编写一个读取圆柱的半径和高并利用公式计算圆柱体底面积和体积的程序 iimport math reval(input("enter the r")) heval(input("enter the h")) arear*r*math.pi print("the area ",area,…

韦东山-数码相框(1)

做工程的步骤 弄清需求设计框架编写代码测试 项目需求 上电,LCD显示一副图片; 然后根据默认配置,决定停留还是自动显示下一副; 点击一下,出现对话框,选择手动显示或者自动显示; 根据手势的…

perf出现SIGBUS的coredump

coredump信息 (gdb) bt full #0 0x000055c37fa62c00 in perf_evsel__parse_sample (evsel0x55c381223b00, event0x7f144843ab30, data0x7ffcbbcf6540) at util/evsel.c:1939 type <optimized out> swapped <optimized out> array <optimized out> ma…

MySQL使用教程:数据库、表操作

目录 1. 免密码登录MySQL1.1 免密码配置1.2 登录选项介绍 2. MySQL基础配置&#xff1a;my.cnf3. 开机自启动设置&#xff08;可选设置&#xff09;4. 查看存储引擎5. 查看系统的编码规则和校验规则6. 数据库的操作6.1 查看数据库6.2 创建数据库 create database6.3 删除数据库…

正信法律:朋友生病借了钱不认我该怎么办

当朋友生病急需帮助时&#xff0c;伸出援手是人之常情。但若借款之后对方迟迟不还款&#xff0c;甚至出现不承认借款的情况&#xff0c;这无疑会让人陷入两难的境地。面对这样的困境&#xff0c;我们需要保持冷静&#xff0c;理性地分析情况&#xff0c;并采取适当的措施来解决…

畅捷通T+ Ufida.T.DI.UIP.RRA.RRATableController 远程命令执行漏洞

一、漏洞信息 漏洞名称&#xff1a;畅捷通T Ufida.T.DI.UIP.RRA.RRATableController 远程命令执行漏洞 漏洞类别&#xff1a;远程命令执行漏洞 风险等级&#xff1a;高危 二、漏洞描述 畅捷通TPlus适用于异地多组织、多机构对企业财务汇总的管理需求&#xff1b;全面支持企…