7.深度学习概述

深度学习概述

  • 1. 线性回归
    • 1.1 线性回归一般表达式
    • 1.2 线性回归内积表达方式:
    • 1.3 多个样本时,线性回归的进一步表达:
    • 1.4 线性回归方程的解析
    • 1.5 线性回归就是求loss函数的最小值
  • 2. 如何求函数最小值
    • 2.1 一个例子
    • 2.2 求导法——求最小值
    • 2.3 求导法存在的问题
    • 2.4 迭代法——求最小值
  • 3. 代码实现
    • 3.1 手动求函数最小值
    • 3.2 使用pytorch求函数最小值

原文: https://blog.csdn.net/Deadwalk/article/details/139606252?spm=1001.2014.3001.5502

1. 线性回归

1.1 线性回归一般表达式

  • y = f ( x ) = x 1 w 1 + x 2 w 2 + . . . + x n w n + b y = f(x) = x_1w_1 + x_2w_2 + ... + x_nw_n + b y=f(x)=x1w1+x2w2+...+xnwn+b
    • ( x 1 、 x 2 、 x n ) :输入特征向量 ( x ) 的各个特征值,代表输入数据的特征。 (x_1、x_2、x_n):输入特征向量 ( x ) 的各个特征值,代表输入数据的特征。 (x1x2xn):输入特征向量(x)的各个特征值,代表输入数据的特征。
    • ( w 1 、 w 2 、 w n ) :权重向量 ( w ) 的各个权重值,用来衡量每个特征对输出的影响程度。 (w_1、w_2、w_n):权重向量 ( w ) 的各个权重值,用来衡量每个特征对输出的影响程度。 (w1w2wn):权重向量(w)的各个权重值,用来衡量每个特征对输出的影响程度。
    • ( b ) :偏置项,也称为截距项,用来调整模型的输出值,即在没有特征输入时的输出值。 ( b ):偏置项,也称为截距项,用来调整模型的输出值,即在没有特征输入时的输出值。 (b):偏置项,也称为截距项,用来调整模型的输出值,即在没有特征输入时的输出值。
    • ( y ) :模型的输出值,即线性回归模型对输入特征的预测值。 ( y ):模型的输出值,即线性回归模型对输入特征的预测值。 (y):模型的输出值,即线性回归模型对输入特征的预测值。

1.2 线性回归内积表达方式:

  • y = f ( x ) = x @ w + b y = f(x) = x@w+ b y=f(x)=x@w+b
    • x @ w :特征向量 ( x ) 与权重向量 ( w ) 的内积 x@w:特征向量 ( x ) 与 权重向量( w ) 的内积 x@w:特征向量(x)与权重向量(w)的内积

1.3 多个样本时,线性回归的进一步表达:

  • y = f ( X ) = X @ w + b y = f(X) = X@w+ b y=f(X)=X@w+b
    • X :特征矩阵,矩阵的行是一条一条的样本,矩阵的列是多个特征向量。 X:特征矩阵,矩阵的行是一条一条的样本,矩阵的列是多个特征向量。 X:特征矩阵,矩阵的行是一条一条的样本,矩阵的列是多个特征向量。

1.4 线性回归方程的解析

在这里插入图片描述
在这里插入图片描述

  • 在训练时,xy是训练集中的特征和标签,看作是常量wb是待优化的参数值,看作是变量
  • 在推理时,wb已经找到了比较合适的值固定下来,看作常量;此时x是待预测的样本的特征,是变量
  • 预测的本质:把x,求解y

1.5 线性回归就是求loss函数的最小值

  • 训练过程
    在这里插入图片描述
    • 从训练集中取出一对x 和y
    • 把x带入模型,求解预测结果y_pred
    • 找到一种方法,度量y和y_pred的误差loss
    • 由此推导:
      • loss是y和y_pred的函数;
      • y_pred是模型预测的结果,是w和b的函数;
      • 所以简单来说,loss也是w和b的函数
  • 训练的本质
    由上图推导结果可知,训练的本质就是求解loss什么时候是最小值。当w和b取得什么值的时候,loss最小。

2. 如何求函数最小值

2.1 一个例子

  • y = 2 x 2 y= 2x^2 y=2x2
    在这里插入图片描述
  • 上述这个示例中,求y最小值是比较简单的,从图形中可以看到x=0时,y=0为最小值。但是实际工程中,并不是所有的函数y=f(x)都能画出来,简单地找到最小值,此时就需要使用导数求最小值。

2.2 求导法——求最小值

  • 通过回归导数求极值的方法,我们知道大致步骤如下:
    • 第一步:求函数的导数
    • 第二步:令导数等于零
    • 第三步:解方程,求出疑似极值点
    • 第四步:验证该点是否是极值点以及是什么极值点

2.3 求导法存在的问题

  • 求导的方法是有一定前提条件的,即:
    • 第一步的求(偏)导数是可以求得的;
    • 第三步(偏)导数为零后,方程(组)是可以解的。
    • 实际工程中,上述方法是不可行的。以Llama3-8B模型为例,其有80亿个输入参数 x,按照上述的求解方法是几乎无法求得最小值的!
    • 由此可知,通过推导公式期望一次性求得最小值是不现实的;而我们可以借鉴人工智能中一个重要的思想:迭代法来逐步求解最小值。

2.4 迭代法——求最小值

  • 原理如下图:
    在这里插入图片描述
  • 随机选择一个出生点 x 0 : 随机选择一个出生点x_0: 随机选择一个出生点x0
    • 当 x 0 在最小值的左侧时: x 0 + 正数(一个非常小的正数),向右侧移动,而最小值左侧的导数是负数,所以可以看作 x 0 − 导数 当x_0在最小值的左侧时:x_0 + 正数(一个非常小的正数),向右侧移动,而最小值左侧的导数是负数,所以可以看作 x_0 - 导数 x0在最小值的左侧时:x0+正数(一个非常小的正数),向右侧移动,而最小值左侧的导数是负数,所以可以看作x0导数
    • 当 x 0 在最小值的右侧时: x 0 − 正数(一个非常小的正数),向左侧移动,而最小值右侧的导数是正数,所以也可以看作 x 0 − 导数 当x_0在最小值的右侧时:x_0 - 正数(一个非常小的正数),向左侧移动,而最小值右侧的导数是正数,所以也可以看作 x_0 - 导数 x0在最小值的右侧时:x0正数(一个非常小的正数),向左侧移动,而最小值右侧的导数是正数,所以也可以看作x0导数
    • 当 x 0 是最小值时: x 0 不需要移动,而此处的导数也正是 0 ,所以依然可以看作 x 0 − 导数 当x_0是最小值时:x_0不需要移动,而此处的导数也正是0,所以依然可以看作 x_0 - 导数 x0是最小值时:x0不需要移动,而此处的导数也正是0,所以依然可以看作x0导数
  • 梯度下降的概念
    • 在一元函数中,求函数f(x)在某一点的斜率为导数;在多元函数中,称为偏导数,也就是梯度。
    • 减去导数也就是减去梯度,这就是梯度下降法!

3. 代码实现

3.1 手动求函数最小值

  • y = 2 x 2 y= 2x^2 y=2x2
import numpy as npdef fn(x):"""原始函数"""return 2 * x ** 2def dfn(x):"""导函数"""return 4 * xdef gradient_descent(x0, learning_rate, dfn, epochs):"""使用梯度下降法求函数的最小值Parameters:x0 (float): 初始点的位置learning_rate (float): 学习率dfn (function): 导函数epochs (int): 迭代次数Returns:x_min (float): 最小值点的位置"""for _ in range(epochs):x0 = x0 - learning_rate * dfn(x0)return x0# 随机选择一个出生点
x0 = np.random.randint(low=-1000, high=1000, size=1)# 迭代次数
epochs = 1000# 学习率
learning_rate = 1e-2# 使用梯度下降法求最小值
x_min = gradient_descent(x0, learning_rate, dfn, epochs)# 输出最小值
print("最小值点的位置:", x_min)
  • f ( x , y , z ) = x 2 + y 2 + z 2 f ( x , y , z ) = x^2 + y^2 + z^2 f(x,y,z)=x2+y2+z2
import numpy as npdef df_x(x, y, z):"""f 对 x 求偏导"""return 2 * xdef df_y(x, y, z):"""f 对 y 求偏导"""return 2 * ydef df_z(x, y, z):"""f 对 z 求偏导"""return 2 * z# 随机选择出生点
x0 = np.random.randint(low=-1000, high=1000, size=(1,))
y0 = np.random.randint(low=-1000, high=1000, size=(1,))
z0 = np.random.randint(low=-1000, high=1000, size=(1,))# 迭代次数
epochs = 1000# 学习率
learning_rate = 1e-2for _ in range(epochs):# 求解每个变量的偏导fx = df_x(x0, y0, z0)fy = df_y(x0, y0, z0)fz = df_z(x0, y0, z0)# 每个变量都减去自己的偏导x0 = x0 - learning_rate * fxy0 = y0 - learning_rate * fyz0 = z0 - learning_rate * fz# 输出更新后的变量值
print("更新后的 x 值:", x0)
print("更新后的 y 值:", y0)
print("更新后的 z 值:", z0)

3.2 使用pytorch求函数最小值

  • y = 2 x 2 y= 2x^2 y=2x2
import torch# 定义原始函数和导函数
def fn(x):return 2 * x ** 2# 说明:pytorch可以通过grad函数求导,所以可以省去写导函数
# def dfn(x):
#     return 4 * x# 随机选择出生点
# requires_grad=True用来告诉框架该变量是一个张量,需要计算梯度。
x0 = torch.randint(low=-1000, high=1001, size=(1,), dtype=torch.float32, requires_grad=True)# 迭代次数
epochs = 1000# 学习率
learning_rate = 1e-2# 使用 PyTorch 进行梯度下降
for _ in range(epochs):# 正向传播计算损失loss = fn(x0)# 反向传播计算梯度loss.backward()# 获取梯度并更新参数with torch.no_grad():grad = x0.gradx0 -= learning_rate * grad# 梯度清零x0.grad.zero_()# 输出最小值点的位置
print("最小值点的位置:", x0.item())
  • f ( x , y , z ) = x 2 + y 2 + z 2 f ( x , y , z ) = x^2 + y^2 + z^2 f(x,y,z)=x2+y2+z2 为例
import torchdef fn(x, y, z):"""函数定义"""return x**2 + y**2 + z**2# 说明:pytorch可以通过grad函数求导,所以可以省去写导函数
# def df_x(x, y, z):
#     return 2 * x# def df_y(x, y, z):
#     return 2 * y# def df_z(x, y, z):
#     return 2 * z# 随机选择出生点
x0 = torch.randint(low=-1000, high=1001, size=(1,), dtype=torch.float32, requires_grad=True)
y0 = torch.randint(low=-1000, high=1001, size=(1,), dtype=torch.float32, requires_grad=True)
z0 = torch.randint(low=-1000, high=1001, size=(1,), dtype=torch.float32, requires_grad=True)# 迭代次数
epochs = 1000# 学习率
learning_rate = 1e-2# 使用 PyTorch 进行梯度下降
for _ in range(epochs):# 正向传播计算损失loss = fn(x0, y0, z0)# 反向传播计算梯度loss.backward()# 获取梯度并更新参数# 在测试阶段或者不需要计算梯度的情况下使用 torch.no_grad()# 以提高计算效率并避免不必要的梯度计算。with torch.no_grad():x0 -= learning_rate * x0.grady0 -= learning_rate * y0.gradz0 -= learning_rate * z0.grad# 梯度清零x0.grad.zero_()y0.grad.zero_()z0.grad.zero_()# 输出更新后的变量值
print("更新后的 x 值:", x0.item())
print("更新后的 y 值:", y0.item())
print("更新后的 z 值:", z0.item())

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

从零开始开发视频美颜SDK:实现直播美颜效果

因此,开发一款从零开始的视频美颜SDK,不仅可以节省成本,还能根据具体需求进行个性化调整。本文将介绍从零开始开发视频美颜SDK的关键步骤和实现思路。 一、需求分析与技术选型 在开发一款视频美颜SDK之前,首先需要进行详细的需求…

悠律凝声环Ringbuds Pro耳机:素皮纹理质感独一档,音质也拉满

悠律(UMELODY)推出的这款新品——凝声环开放式耳机,以其独特的设计风格和出色的音质表现赢得了众多消费者的喜爱。 在外观上,凝声环采用了时尚潮酷的设计理念,并且采用简约典雅素皮工艺,首次将“素皮”材料…

OpenShift3.11 社区版搭建

一、资源规划 HostnameIPOSCPUMemDiskmaster192.168.78.131CentOS7.92vCPU4G60Gnode1192.168.78.132CentOS7.92vCPU4G60Gnode2192.168.78.133CentOS7.92vCPU4G60G 二、安装过程: 2.1 前期配置 开启所有节点的 SELinux (所有主机执行) gr…

钡铼技术有限公司S270用于智慧物流中心货物追踪与调度

钡铼技术有限公司的第四代S270是一款专为智慧物流中心设计的工业级4G远程遥测终端RTU,其强大的功能和灵活性使其成为货物追踪与调度的理想选择。 技术规格和功能特点 钡铼S270支持多种通信协议,包括短信和MQTT,这使得它能够与各种云平台如华…

儿童房灯具什么牌子好?几款儿童房灯具款式墙裂分享

随着科技的不断发展和生活方式的改变,儿童青少年近视率的增长趋势引起了人们的关注。近视不仅对孩子们的视力健康构成威胁,还可能对他们的学习和日常生活带来不便。因此,如何有效地预防和改善儿童青少年的视力问题成为了一个亟待解决的课题。…

【JavaEE】Spring AOP详解

一.AOP的定义. Aspect Oriented Programming(面向切面编程)概括的来说AOP是一种思想, 是对某一类事情的集中处理 什么是面向切面编程呢? 切面就是指某一类特定问题, 所以AOP也可以理解为面向特定方法编程.什么是面向特定方法编程呢? 比如上个博客文章…

餐饮管理系统-计算机毕业设计源码43667

餐饮管理系统 摘 要 在信息化、数字化的时代背景下,餐饮行业面临着前所未有的挑战与机遇。为了提高运营效率、优化顾客体验,餐饮企业亟需一套高效、稳定且灵活的管理系统来支撑其日常运营。基于Spring Boot的餐饮管理系统应运而生,成为餐饮行…

【Linux】:程序替换

朋友们、伙计们,我们又见面了,本期来给大家解读一下有关Linux程序替换的相关知识点,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! C 语 言 专 栏:C语言:从入门…

蓝牙人员定位精准吗?是否会对人体有伤害?

不知道大家现在使用的蓝牙人员定位系统都是什么样的呢?其实就出行而言,使用GPS定位也就是足够了的,而且目前的定位相对也比较精准了,效果还是很不错的。但是如果说是室内定位,很显然常规的定位系统是无法满足使用需求的…

【背就有效】软考中级信息系统监理师核心知识点汇总!

宝子们!上半年软考已经告一段落了,准备下半年考信息系统监理师的小伙伴可以开始准备了。这里给大家整理了信息系统监理师核心知识点汇总,涵盖全书90%的重点,先把这个存下!再慢慢看书,边看书边背这个&#x…

【机器学习】主成分分析(PCA):数据降维的艺术

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 主成分分析(PCA):数据降维的艺术引言PCA的基…

Plaxis Python API的连接与配置、外部Python编译器的使用、Python命令流自动建模过程,典型岩土工程案例

目录 第一部分 Plaxis软件简介及 Plaxis Python API环境搭建 第二部分 Plaxis自动化建模-基础案例 第三部分 进阶案例—Python全自动实现 第四部分 高级案例—Python全自动实现 有限单元法在岩土工程问题中应用非常广泛,很多软件都采用有限单元解法。在使用各大…

平凉崆峒区特产美食亮相兰洽会文旅康养展馆

在第三十届兰洽会的文旅康养展馆中,平凉的特产无疑是一道亮丽的风景线。作为促进区域经济合作与交流的重要平台,每年都吸引着众多企业和特色产品的亮相。 走进这个充满活力与特色的展馆,首先映入眼帘的是琳琅满目的特色产品。平凉红牛的…

【ai_agent】从零写一个agent框架(三)实现几个示例中的service:llm,tool等

前言 上一篇文章里我们实现了一个基本的运行时,能够将service按照plan执行起来,本文我们尝试实现一些基本节点,最终运行一个最简单的agent。 代码仓库 1. Openai-llm 我们这里还是接openai的llm能力。 先定义一下模型的基本配置&#xf…

el-from中校验,如果某一项需要另一项填写才能校验

使用validateField <el-form:model"params":rules"rules":scroll-to-error"true"ref"refrom"v-else><el-form-item label"用户姓名" prop"name"><el-input placeholder"请输入用户姓名"…

5、闪存简述

闪存基本原理 如下图所示浮栅晶体管&#xff0c;当判断是0或1的时候&#xff0c;是在源极加电&#xff0c;当源极和漏极能导通则为1&#xff0c;否则为0&#xff1b;源极和漏极能导通的前提是源极和漏极之间充满电子。 假如在控制极加电(电子具有向电性)&#xff0c;衬底的电…

[计网初识1] TCP/UDP

学习内容 1.TCP建立链接的3次握手&#xff0c;断开连接的4次挥手 2.TCP报文段组成 内容 1.TCP 建立连接的3次握手? 假设主动方是客户端&#xff0c;被动方是服务端。 第一次 客户端给服务端发送 “hello,我是客户端” (TCP段中 SYN1) 第二次 服务端给客户端发送"我接…

一站式短视频矩阵开发,高效托管!

短视频矩阵系统源码SaaS解决方案提供全面的开发服务&#xff0c;包括可视化视频编辑、矩阵式内容分发托管以及集成的多功能开发支持。 短视频矩阵&#xff1a;引爆您的数字营销革命 短视频矩阵系统是一套多功能集成解决方案&#xff0c;专为提升在短视频平台上的内容创作、管理…

C语言笔记31 •单链表经典算法OJ题-3.反转链表•

反转链表 1.问题 给你单链表的头节点 head&#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 2.代码实现&#xff1a; //3.反转链表 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include <assert.h>typedef int …