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

机器学习

目录

  • 机器学习
    • 一.安装基本环境
      • 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)就是随机丢弃隐藏层的一些数,来达到减少模型复杂度的作用,虽然这种方法听起来比较简单,但是再实际应用中他的效果有的时候比权重衰退还要好一点。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

pyecharts介绍

文章目录 介绍安装pyecharts基本使用全局配置选项 折线图相关配置地图模块使用柱状图使用 介绍 echarts虑是个由百度开源的数据可视化&#xff0c;凭借着良好的交互性&#xff0c;精巧的图表设计&#xff0c;得到了众多开发者的认可&#xff0c;而Pyhon是门富有表达力的语言&a…

蓝桥杯——lcd显示

一&#xff1a;复制文件 从官方参考文件中复制相关文件&#xff0c;Src中的lcd.c&#xff0c;Inc中的lcd.h&#xff0c;fonts.h复制到自己创建的文件中 二&#xff1a;lcd初始化 在lcd.h中找到四个初始化函数&#xff0c;将其写到main文件中 三&#xff1a;写lcd显示函数 在…

ligerUI在前端层面对于数据的验证拦截

当你的系统框架采用ligerUI的时候&#xff0c;对于常见的数据验证&#xff0c;我们可以采取ligerUI本身的一些API调用来进行前端的数据验证&#xff0c;例如当你想遍历验证每行数据的时候&#xff1a; var rows liger.get("edit_Mtl").getData(); for (var i 0; i…

ubuntu-24.04.1-desktop 中的 QT6.7 QtCreator 调试程序

ubuntu-24.04.1-desktop 中的 QT6.7 QtCreator 中调试程序 &#xff11; 启动调试时提示&#xff1a;The kit does not have a debugger set.&#xff12; CDB配置问题&#xff12;.1 选择 工具 -> 外部 -> 配置&#xff12;.2 配置 CDB 路径 &#xff11; 启动调试时提示…

VSCode ssh远程连接内网服务器(不能上网的内网环境的Linux服务器)的终极解决方案

VSCode ssh远程连接内网服务器&#xff08;不能上网的内网环境的Linux服务器&#xff09; 离线下载vscode-server并安装: 如果远程端不能联网可以下载包离线安装,下载 vscode-server 的 url 需要和 vscode 客户端版本的 commit-id 对应.通过 vscode 面板的帮助->关于可以获…

【C语言基础】基本数据类型和常量介绍

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 博客内容主要围绕&#xff1a; 5G/6G协议讲解 高级C语言讲解 Rust语言讲解 文章目录 基本数据类型和常量介绍一、整数类型 int二、浮点数值类型 f…

【Deepseek】AnythingLLM + Ollama

1. 下载安装 anythingllm 下载地址&#xff1a;https://anythingllm.com/desktop 2. 启动anything 点击 Get started 3.创建工作空间 4.选择Ollama大语言模型 聊天设置 当前只有一个1.5b的模型 下载完成7b模型后 选择后记得点击更新到工作空间&#xff01;&…

vscode settings(一):全局| 用户设置常用的设置项

参考资料 Visual Studio Code权威指南 by 韩骏 一. 全局设置与用户设置 1.1 Vscode支持两种不同范围的设置 用户设置(User Settings)&#xff1a;这是一个全局范围的设置&#xff0c;会应用到所有的Visual Studio Code实例中。工作区设置(Workspace Settings)&#xff1a;设…

Deepseek和Grok 3对比:写一段冒泡排序

1、这是访问Grok 3得到的结果 2、grok3输出的完整代码&#xff1a; def bubble_sort(arr):n len(arr) # 获取数组长度# 外层循环控制排序轮数for i in range(n):# 内层循环比较相邻元素&#xff0c;j的范围逐渐减少for j in range(0, n - i - 1):# 如果当前元素大于下一个元…

【DeepSeek系列】05 DeepSeek核心算法改进点总结

文章目录 一、DeepSeek概要二、4个重要改进点2.1 多头潜在注意力2.2 混合专家模型MoE2.3 多Token预测3.4 GRPO强化学习策略 三、2个重要思考3.1 大规模强化学习3.2 蒸馏方法&#xff1a;小模型也可以很强大 一、DeepSeek概要 2024年&#xff5e;2025年初&#xff0c;DeepSeek …

redis中的Lua脚本,redis的事务机制

lua脚本的特点 lua脚本可以操作redis数据库&#xff0c;并且脚本中的代码满足原子性&#xff0c;要么全部被执行&#xff0c;要么全部不执行 lua脚本的语法 脚本示例 lua脚本的草稿&#xff1a; 最终的lua脚本 lua脚本在java里调用的方法 RedisTemplete类里有一个方法&…

文章精读篇——用于遥感小样本语义分割的可学习Prompt

题目&#xff1a;Learnable Prompt for Few-Shot Semantic Segmentation in Remote Sensing Domain 会议&#xff1a;CVPR 2024 Workshop 论文&#xff1a;10.48550/arXiv.2404.10307 相关竞赛&#xff1a;https://codalab.lisn.upsaclay.fr/competitions/17568 年份&#…

Golang访问Google Sheet

步骤 1、创建Project https://console.cloud.google.com/welcome?hlzh-cn&projectvelvety-being-444310-c1 2、启用Google Sheet API https://console.cloud.google.com/apis/library?hlzh-cn&projectvelvety-being-444310-c1 3、创建服务账号 https://conso…

HTTP SSE 实现

参考&#xff1a; SSE协议 SSE技术详解&#xff1a;使用 HTTP 做服务端数据推送应用的技术 一句概扩 SSE可理解为&#xff1a;服务端和客户端建立连接之后双方均保持连接&#xff0c;但仅支持服务端向客户端推送数据。推送完毕之后关闭连接&#xff0c;无状态行。 下面是基于…

网络安全与措施

&#x1f345; 点击文末小卡片 &#xff0c;免费获取网络安全全套资料&#xff0c;资料在手&#xff0c;涨薪更快 # 网络安全问题概述 1) 数据安全 访问&#xff08;授权访问&#xff09;&#xff1b;存储&#xff08;容灾、备份或异地备份等&#xff09; 2) 应用程序 不能…

Next.js 学习-1

Next.js学习 引用&#xff1a;https://www.nextjs.cn/learn/basics/create-nextjs-app 先试试水吧&#xff0c;正好dify用的这个构建的前端项目。 使用 如果您尚未安装 Node.js&#xff0c;请 从此处安装。要求 Node.js 10.13 或更高版本。 好吧得用新的了&#xff0c;记得…

#渗透测试#批量漏洞挖掘#九思OA系列漏洞之SQL注入漏洞(CNVD-2023-23771)

免责声明 本教程仅为合法的教学目的而准备&#xff0c;严禁用于任何形式的违法犯罪活动及其他商业行为&#xff0c;在使用本教程前&#xff0c;您应确保该行为符合当地的法律法规&#xff0c;继续阅读即表示您需自行承担所有操作的后果&#xff0c;如有异议&#xff0c;请立即停…

macOS14 安装MySQL指南

1.下载 地址&#xff1a;https://downloads.mysql.com/archives/community/ 2.安装 双击 *.dmg 文件&#xff0c;按提示点击“下一步”&#xff0c;途中会弹出一个对话框&#xff0c;要求输入 root 密码&#xff0c;完成即可。 3.开启MySQL服务。 点击右上角苹果按钮&#x…

《Head First设计模式》读书笔记 —— 单件模式

文章目录 为什么需要单件模式单件模式典型实现剖析定义单件模式本节用例多线程带来的问题解决问题优化 Q&A总结 《Head First设计模式》读书笔记 相关代码&#xff1a; Vks-Feng/HeadFirstDesignPatternNotes: Head First设计模式读书笔记及相关代码 用来创建独一无二的&a…

Git常见命令--助力开发

git常见命令&#xff1a; 创建初始化仓库&#xff1a; git 将文件提交到暂存区 git add 文件名 将文件提交到工作区 git commit -m "注释&#xff08;例如这是发行的版本1&#xff09;" 文件名 查看状态 如果暂存区没有文件被提交显示&#xff1a; $ git status On…