深度学习:梯度下降法

损失函数 L:衡量单一训练样例的效果。

成本函数 J:用于衡量 w 和 b 的效果。

如何使用梯度下降法来训练或学习训练集上的参数w和b ?

成本函数J是参数w和b的函数,它被定义为平均值;

损失函数L可以衡量你的算法效果,每一个训练样例都输出,把它跟真实标签进行比较。

**梯度下降法:**从初始点开始,朝最陡的下坡方向走一步,在梯度下降一步后,或许在那里停下,或者尽可能快的向下走,这是梯度下降的一次迭代。然后继续,希望收敛到全局最优解。

Gradient Descent 梯度下降法,重复执行以下的更新操作:

  • 更新w的值(使用 := 表示更新w)。
  • Learning Rate 学习率 可以控制每一次迭代,或者梯度下降法中的步长。
  • 这里的导数 dJ(w)/dw 就是对参数w的更新或变化量。
  • 我们写代码来实现梯度下降时,会使用变量名dw表示导数,即上图中的式子写为:
  • w := w - dw
  • 新的w的值 等于 w自身 减去 学习率和导数的乘积

导数是函数在对应点的斜率,函数的斜率是高除以宽。如果J函数最开始在右边的点,那么它的斜率是正数,更新的w的值w := w - dw会变小,即上图中的点会往左移;反之,如果一开始点在左上方,即斜率为负数,那么更新的w的值会变大,也就是会逐渐往右移。不论起始点在左边还是右边,最终都会到中间底部那个点。

在深度学习里,有循环会降低算法的运行效率。实现梯度下降的迭代,不使用任何循环,而是向量化(Vectorization)。使用内置函数,避免使用显式for循环,可以让程序运行速度快很多。

python 复制代码
import numpy as np

import time

a = np.random.rand(1000000)
b = np.random.rand(1000000)

tic = time.time()
c = np.dot(a,b)
toc = time.time()

print(c)
print("Vectorization version: " + str(1000*(toc-tic)) + "ms")

c = 0
tic = time.time()
for i in range(1000000):
    c += a[i]*b[i]
toc = time.time()

print(c)
print("For loop:" + str(1000*(toc-tic)) + "ms")

运行结果:

由上述代码运行结果可知,使用内置函数比显式使用for循环快了200倍,所以我们尽量不要使用显示for循环。

相关推荐
zhangrelay16 小时前
如何使用AI快速编程实现标注ROS2中sensor_msgs/msg/Image图像色彩webots2025a
人工智能·笔记·opencv·学习·计算机视觉·机器人视觉
武子康16 小时前
AI研究-120 DeepSeek-OCR 从 0 到 1:上手路线、实战要点
人工智能·深度学习·机器学习·ai·ocr·deepseek·deepseek-ocr
大千AI助手16 小时前
LIFT:基于低秩引导的稀疏微调
人工智能·神经网络·lora·大模型·lift·大千ai助手·稀疏微调
Serverless 社区16 小时前
算力成本降低 33%,与光同尘用 Serverless AI 赋能影视商业内容生产
人工智能·云原生·serverless
L.EscaRC16 小时前
【AI基础篇】Transformer架构深度解析与前沿应用
人工智能·深度学习·transformer
王中阳Go16 小时前
3 - RAG 知识库基础 - AI 超级智能体项目教程
人工智能·agent
司马阅-SmartRead17 小时前
司马阅与数之境科技达成生态战略合作,释放1+1>2的产业赋能价值
人工智能
化作星辰17 小时前
四层神经网络案例(含反向传播)
人工智能·深度学习·神经网络
m0_6501082417 小时前
【论文精读】AVID:基于扩散模型的任意长度视频修复
人工智能·扩散模型·论文精读·视频修复·时序一致性·任意时长·结构引导
TYUT_xiaoming17 小时前
ubuntu22.04 GPU环境安装mindspore
linux·人工智能·深度学习