2025年信息科学与工程学院科协机器学习介绍——机器学习基本模型介绍

devtools/2025/3/1 2:55:42/

机器学习

目录

  • 机器学习
    • 一.安装基本环境
      • conda/miniconda环境
    • 二.数据操作+数据预处理
      • 一维数组二维数组以及多维数组的认识
      • 访问元素的方法
      • torch中tenson的应用
      • 张量的运算
      • 张量的广播
    • 三.线性代数相关知识
    • 四.线性回归
      • SoftMax回归问题(分类问题)
        • 什么是分类问题:
    • 五.感知机
      • 什么是感知机
    • 六.权重衰退和丢弃法
      • 欠拟合和过拟合的概念
        • 欠拟合
        • 过拟合
      • 权重衰退
      • 丢弃法

一.安装基本环境

conda/miniconda环境

  • 在conda环境里面使用pip install torch d2l来安装
  • 注意,torch在win环境里面应当去官网找链接下载,并且要看好自己的电脑是否有Nvidia显卡,如果检查无误,再查看Nvidia显卡是否安装了CUDA驱动,根据你的驱动去选择torch的版本。(如果没有Nvidia显卡可以选择CPU版本的torch)

二.数据操作+数据预处理

一维数组二维数组以及多维数组的认识

  • 零维数组:单个字符[a]
  • 一维数组(向量):[a,b,c…]
  • 2-d(矩阵):[[a,b…],[a,b…]]
  • 3-d:主要是图片
  • 4-d:主要是批量的RGB图片[[]]
  • 5-d:视频

访问元素的方法

[QQ图片20241017174559.png

torch中tenson的应用

(首先,我们导入torch。请注意,虽然它被称为PyTorch,但是代码中使用torch而不是pytorch)

引入torch要用到的是

import torch

可以用torch.arange()来创建一个顺序的数组

可以用numberelement来获取张量里面的数据数量以及用shape来获取张量的格式

a=torch.zeros((2, 3, 4))
a.numel()
a.shape

同样,我们可以创建一个形状为(2,3,4)的张量,其中所有元素都设置为1。代码如下:

torch.ones((2, 3, 4))

tensor([[[1., 1., 1., 1.],[1., 1., 1., 1.],[1., 1., 1., 1.]],[[1., 1., 1., 1.],[1., 1., 1., 1.],[1., 1., 1., 1.]]])

有时我们想通过从某个特定的概率分布中随机采样来得到张量中每个元素的值。 例如,当我们构造数组来作为神经网络中的参数时,我们通常会随机初始化参数的值。 以下代码创建一个形状为(3,4)的张量。 其中的每个元素都从均值为0、标准差为1的标准高斯分布(正态分布)中随机采样。

torch.randn(3, 4)

tensor([[ 0.4085,  1.1003,  0.6239, -0.6981],[ 0.4395, -0.6122,  0.5716, -0.6712],[ 0.5647, -0.2552,  0.7448,  0.9184]])

我们还可以[通过提供包含数值的Python列表(或嵌套列表),来为所需张量中的每个元素赋予确定值]。 在这里,最外层的列表对应于轴0,内层的列表对应于轴1。

torch.tensor([[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])

tensor([[2, 1, 4, 3],[1, 2, 3, 4],[4, 3, 2, 1]])

张量的运算

张量的运算有(+,-,,/,**)注意这里的运算都是按元素运算

张量的广播

在大多数情况下,我们将沿着数组中长度为1的轴进行广播,如下例子:

a = torch.arange(3).reshape((3, 1))

b = torch.arange(2).reshape((1, 2))

a, b

(tensor([[0],[1],[2]]),tensor([[0, 1]]))

由于ab分别是3×1和1×2矩阵,如果让它们相加,它们的形状不匹配。 我们将两个矩阵广播为一个更大的3×2矩阵,如下所示:矩阵a将复制列, 矩阵b将复制行,然后再按元素相加。

a + b

tensor([[0, 1],[1, 2],[2, 3]])

三.线性代数相关知识

线性代数详情可以参考河海大学线性代数课本,其中有详细的讲解,在这里仅仅列出相关名词和我记忆中的相关知识点,后续可能会有所补充

  • 矩阵的加减乘除
    • 矩阵的乘法比较特殊,一个m*n的矩阵和一个n*l的矩阵相乘得到的是一个m*l的矩阵
  • 矩阵的范数
  • 矩阵的特征向量
  • 正交矩阵和正定矩阵
  • 对称矩阵,反对称矩阵

四.线性回归

  • 线性回归的相关知识

    举个例子,我们现在有一个函数, y = a x 1 + b x 2 + h y=ax_1+bx_2+h y=ax1+bx2+h 现在已经知道许多不同的< x 1 x_1 x1, x 2 x_2 x2> 和他们对应的y值,现在我们想要求解的是未知系数abh

    在计算机中的计算方法:

    ​ 我们把a,b包装成一个一行两列的张量[a,b]然后给定一个初始值

    ​ 定义一个loss函数,是预测值和真实值差的平方,这个平方当然是越小越好,最好为零

    ​ 我们进行求导操作 ∂ l ∂ ω \frac{\partial l}{\partial \omega} ωl然后 ( ω − η ∂ l ∂ w ) \left( \omega-\eta\frac{\partial l}{\partial w}\right) (ωηwl) 其中 η \eta η是一个超参数,也就是人工自己设定的,这个值的大小是根据多次实验的来的完成一次 相当与更新了一次 ω \omega ω 经过多组参数多次更新之后就可以得到一个误差相对比较小的参数

SoftMax回归问题(分类问题)

什么是分类问题:

分类问题就是给你一张图片,识别图片里的是什么内容

  • 实现原理

    • 把图像分割成数个区域,每个区域代表了一个特征值(具体什么原理之后再说,现在就只需要知道可以把一张二维的图片处理成一维的数据)假设这些特征值为 x 1 , x 2 . . . . x n x_1,x_2....x_n x1,x2....xn

    • 然后确定类别,比如我们要识别一张图片是猫、狗还是鸡。我们就有三个类别

    • 接下来我们要知道怎么用输入来计算输出,我们假设输出结果为 o 1 , o 2 . o 3 o_1,o_2.o_3 o1,o2.o3

    • 我们令
      o 1 = ω 11 x 1 + ω 12 x 2 + ω 13 x 3 o 2 = ω 21 x 1 + ω 22 x 2 + ω 23 x 3 o 3 = ω 31 x 1 + ω 32 x 2 + ω 33 x 3 o_1=\omega_{11}x_1+\omega_{12}x_2+\omega_{13}x_3 \\ o_2=\omega_{21}x_1+\omega_{22}x_2+\omega_{23}x_3\\ o_3=\omega_{31}x_1+\omega_{32}x_2+\omega_{33}x_3 o1=ω11x1+ω12x2+ω13x3o2=ω21x1+ω22x2+ω23x3o3=ω31x1+ω32x2+ω33x3

    • o n o_n on越大代表是当前种类的概率越大,但是这样看仍然不方便,我们更希望它可以直接代表概率。

所以我们可以用
y ^ = e o 1 Σ e o i \hat{y}=\frac {e^{o_1}}{\Sigma e^{o_i}} y^=Σeoieo1
来把其概率化,这样表示出来是一个大于0小于1的数,并且一定是正的我们把这里的 y ^ \hat{y} y^记作 y ^ = s o f t m a x ( o ) \hat{y}=softmax(o) y^=softmax(o)

由此我们可以求出 y 1 ^ , y 2 ^ , y 3 ^ . . . . . y n ^ \hat{y_1},\hat{y_2},\hat{y_3}.....\hat{y_n} y1^,y2^,y3^.....yn^ 他们的和加起来是1,其中数值最大的就是最有可能的分类

  • 关于计算

    • 我们一般把数据进行矢量化处理,

    • 假设我们读取了一个批量的样本 X \mathbf{X} X x 11 , x 12 . . . x n n x_{11},x_{12}...x_{nn} x11,x12...xnn),其中特征维度(输入数量)为 d d d,批量大小为 n n n。此外,假设我们在输出中有 q q q个类别。那么小批量样本的特征为 X ∈ R n × d \mathbf{X} \in \mathbb{R}^{n \times d} XRn×d,权重为 W ∈ R d × q \mathbf{W} \in \mathbb{R}^{d \times q} WRd×q,偏置为 b ∈ R 1 × q \mathbf{b} \in \mathbb{R}^{1\times q} bR1×q。softmax回归的矢量计算表达式为:

      O = X W + b , Y ^ = s o f t m a x ( O ) . \begin{aligned} \mathbf{O} &= \mathbf{X} \mathbf{W} + \mathbf{b}, \\ \hat{\mathbf{Y}} & = \mathrm{softmax}(\mathbf{O}). \end{aligned} OY^=XW+b,=softmax(O).

  • 损失函数 l o s s loss loss

    • 这里要用到一些概率论的知识,似然估计
      似然估计简单来说就是,假设我现在有黑白两种颜色的球100个,其中90个是一种颜色,另外10个小球是另一种颜色,我现在拿出一个球是黑色,那我就会猜测黑颜色的球更多,毕竟更趋向于已经发生的时间概率更大。
      所以,我们现在假设一个概率分布有一个未知量n,那我我现在不断模拟这个概率分布,得到 x 1 , x 2 . . . x_1,x_2... x1,x2... 那么我会得到这样一个函数
      P = ∏ i = 1 k P ( x = x i ; n ) P= \prod_{i=1}^k P(x=x_i;n) P=i=1kP(x=xi;n)
      ​ 现在,经过不断的模拟,事件已经发生,所以倾向于P的概率最大,我们就要调整n来让P最大,这就叫似然函数

      知道了这些,我们再来定义softmax的损失函数

      ​ softmax函数给出了一个向量 y ^ \hat{\mathbf{y}} y^,我们可以将其视为“对给定任意输入 x \mathbf{x} x的每个类的条件概率”。假设整个数据集 { X , Y } \{\mathbf{X}, \mathbf{Y}\} {X,Y}具有 n n n

      个样本,其中索引 i i i的样本由特征向量 x ( i ) \mathbf{x}^{(i)} x(i)和向量 y ( i ) \mathbf{y}^{(i)} y(i)组成。
      P ( Y ∣ X ) = ∏ i = 1 n P ( y ( i ) ∣ x ( i ) ) . P(\mathbf{Y} \mid \mathbf{X}) = \prod_{i=1}^n P(\mathbf{y}^{(i)} \mid \mathbf{x}^{(i)}). P(YX)=i=1nP(y(i)x(i)).

      根据最大似然估计,我们最大化 P ( Y ∣ X ) P(\mathbf{Y} \mid \mathbf{X}) P(YX),相当于最小化负对数似然:

      − log ⁡ P ( Y ∣ X ) = ∑ i = 1 n − log ⁡ P ( y ( i ) ∣ x ( i ) ) -\log P(\mathbf{Y} \mid \mathbf{X}) = \sum_{i=1}^n -\log P(\mathbf{y}^{(i)} \mid \mathbf{x}^{(i)}) logP(YX)=i=1nlogP(y(i)x(i))

​ 我们定义损失函数 l o s s loss loss
l ( y , y ^ ) = − l o g P ( y ( i ) ∣ x ( i ) ) = − ∑ j = 1 q y j log ⁡ y ^ j l(\mathbf{y}, \hat{\mathbf{y}}) = -log P(\mathbf{y}^{(i)}|\mathbf{x}^{(i)})=- \sum_{j=1}^q y_j \log \hat{y}_j l(y,y^)=logP(y(i)x(i))=j=1qyjlogy^j

五.感知机

什么是感知机

感知机是一个和softmax回归十分相似的模型,但是他的输出和softmax不一样,他只输出固定值(比如1和-1)我们定义一个函数取符号
σ ( x ) = { 1 x ≥ 0 − 1 x ≤ 0 \sigma(x)=\left\{ \begin{matrix} 1 \qquad x\ge0\\ -1 \qquad x\le0 \end{matrix} \right. σ(x)={1x01x0
继续假设我们有n个输入x( x 1 , x 2 , x 3 . . . . . . x n x_1,x_2,x_3......x_n x1,x2,x3......xn) 我们再对应n个系数W( w 1 , w 2 . . . . . . w n w_1,w_2......w_n w1,w2......wn)

如果 ( W T x i ) y i ≤ 0 (W^Tx_i)y_i\le0 (WTxi)yi0那么我们就更新一次函数(和softmax一致,使用的sdg来更新参数),这里可以理解为我们把一个函数变换成它的一般形式,例如 A x + B y + C = 0 Ax+By+C=0 Ax+By+C=0 输入一个 ( x , y ) (x,y) (x,y) 如果大于0就点就会落在直线的上面,反之则在直线下面。

知道了基本的函数之后,我们就可以介绍什么是感知机,最简单的感知机也叫单层感知机,它基本和softmax一样,给定一个输入的向量,乘上对应的权重,得到一个或者数个结果。

之后是更加复杂一点的多层感知机,其实就是在输入和输出之间加入隐藏层,增加系数的个数,也就增加了模型的复杂度,可以拟合更加复杂的模型

额外要注意的一点就是,再隐藏层里我们要避免线性关系,简单来说,我们要使用某些函数,来把线性关系化为非线性我们管这种函数叫做激活函数

其中比较常见的激活函数有relu函数、sigmoid函数等等
r e l u 函数 r e l u ( x ) = m a x ( 0 , x ) s i g m o i d 函数 s i g m o i d ( x ) = 1 1 + e − x relu函数\\ relu(x)=max(0,x)\\ sigmoid函数\\ sigmoid(x)=\frac {1}{1+e^{-x}} relu函数relu(x)=max(0,x)sigmoid函数sigmoid(x)=1+ex1
这两个函数都是可以把线性关系化成非线性关系的函数,只要是隐藏层都要使用到这种激活函数

在这里插入图片描述

六.权重衰退和丢弃法

在了解什么是权重衰退之前,我们要知道两个概念,欠拟合过拟合 这两个概念其实非常容易理解

欠拟合和过拟合的概念

欠拟合

​ 顾名思义,是模型和数据的拟合度并不高,导致了loss很大,识别的也并不准确

过拟合

​ 这个也很好理解,就是在我们训练数据的时候给的训练数据集是由“个性”的,我们是想要由训练数据集来实现识别,但是如果我们把这些“个性”也学习的很好,那就会出现过拟合,举个容易理解的例子:我们想要机器识别一张图片是不是“人”,我们给了它10000个不同的人作为训练集,那么过拟合就是说机器学习的特别好,记住了10000个人每个人精确的样子,这就会导致如果我给他一个10000人以外的人,就不会识别为“人”,换句话说,模型认识这10000个人,别人都不认识,一个良好的模型应该是有一定的动态范围,可以识别一个种类的

在这里插入图片描述

知道了什么是过拟合和欠拟合之后,我们还要知道什么情况会发生过拟合和欠拟合,这一般和两个原因有关

​ 1.模型的复杂度

​ 2.数据的复杂度

当模型复杂度过高而数据复杂度低的时候,就会出现过拟合,相对的,模型复杂度低但数据复杂度高,就会出现欠拟合

复杂度
合适欠拟合
过拟合合适

权重衰退

知道了这个之后我们就可以开始了解什么是权重损失,所谓权重损失,就是把我们的权重控制在一个范围内,不要让它过大或者过小,这样调整的好处是可以降低模型的复杂度,降低过拟合的风险

用一个公式来表示的话就是 W ∣ W ∣ ≤ θ W~~~~~|W|\le\theta W     Wθ

但是这种方法过于的“硬”了,限制的太死,一半我们会使用另外一种更加柔和的方法 l o s s = l ( w , b ) + λ 2 ∣ ∣ ω ∣ ∣ loss=l(\mathbf w,\mathbf b)+\frac {\lambda}{2}||\omega|| loss=l(w,b)+2λ∣∣ω∣∣ 再loss函数里面加入 ω \omega ω 项,就可以限制其不会变的很大,这样也就变相的限制了 ω \omega ω 的取值不能太极端

丢弃法

丢弃法的作用和权重衰退比较像,都是用来防止模型过拟合的,丢弃法(dropout)就是随机丢弃隐藏层的一些数,来达到减少模型复杂度的作用,虽然这种方法听起来比较简单,但是再实际应用中他的效果有的时候比权重衰退还要好一点。


http://www.ppmy.cn/devtools/163504.html

相关文章

【算法】798. 差分矩阵

题目 798. 差分矩阵 思路 实质是二维差分&#xff0c;构造数组b&#xff0c;a为b的前缀和&#xff0c;也要用到前缀和的内容&#xff0c;求出数组b之后用b表示a&#xff0c;和一维差分思路类似&#xff0c;不同之处是在加减c时二维要复杂一些。 代码 #include<iostream…

git -学习笔记

目录 基本操作语法 设置用户和邮箱 版本回退 工作区和暂存区 撤销修改 删除与恢复 一工作区删除了&#xff0c;但是暂存区没删除 二工作区误删了&#xff0c;暂存区还有 github-Git 连接 报错解决-push远程仓库被拒绝 远程库 分支 分支冲突 储藏分支 回到当前分…

【Springboot知识】Logback从1.2.x升级到1.3.x需要注意哪些点?

文章目录 **1. 确认依赖版本**示例依赖配置&#xff08;Maven&#xff09;&#xff1a; **2. 处理 StaticLoggerBinder 的移除**解决方案&#xff1a; **3. 修改日志配置文件**示例 logback.xml 配置&#xff1a; **4. 检查兼容性问题**Spring Boot 2.x 的兼容性解决方案&#…

STM32 物联网智能家居 (七) 设备子系统--风扇控制

STM32 物联网智能家居 (七) 设备子系统–风扇控制 一、概述 下面我们来讲解设备子系统中的风扇控制,这是我们设备子系统中的最后一章,相信前面大家一家掌握了这种架构分层的编程思想,后续会很容易将程序进行扩展和开发。 上一节我们介绍了OLED屏幕的编程思想,有很多小伙…

白帽黑客系列教程之Windows驱动开发(64位环境)入门教程(二)

为什么要写这篇文章呢&#xff1f; 作为一名白帽黑客&#xff0c;如果想要学习ROOTKIT攻防技术&#xff0c;就必须要有能力进行驱动开发&#xff01; 本文章仅提供学习&#xff0c;切勿将其用于不法手段&#xff01; 在Windows操作系统的64位环境中&#xff0c;进行ROOTKIT攻…

android 新增native binder service 方式(三)

书接上回&#xff0c;继续第三种方式&#xff0c;是手动生成 service binder 的方法,项目结构 1&#xff0c;编译aidl aidl 文件保持不变&#xff0c;如何生成Bn和Bp 文件呢。 aidl -I ./libserviceaidl/aidl -h ./ -o ./ --langcpp libserviceaidl/aidl/com/test/IService.a…

【react】TypeScript在react中的使用

目录 一、环境与项目配置 1. 创建 TypeScript React 项目 2. 关键tsconfig.json配置 3.安装核心类型包 二、组件类型定义 1. 函数组件&#xff08;React 18&#xff09; 2.类组件 三、Hooks 的深度类型集成 1. useState 2. useEffect 3. useRef 4. 自定义 Hook 四、事…

Ollama+Cherrystudio+beg-m3+Deepseek R1 32b部署本地私人知识库(2025年2月win11版)

之前综合网络各方面信息得到的配置表&#xff1a; 在信息爆炸的时代&#xff0c;数据安全和个性化需求愈发凸显。搭建本地私人知识库&#xff0c;不仅能确保数据的安全性&#xff0c;还能根据个人需求进行个性化定制&#xff0c;实现知识的高效管理和利用。随着技术的不断发展…