机器学习学习笔记-20240927

news2024/12/24 20:23:01

文章目录

      • 一些简单的指令
      • 数据操作
        • 广播机制
      • 标量,向量,矩阵的相互求导
        • 1. 标量对标量的求导
        • 2. 标量对向量的求导
        • 3. 向量对标量的求导
        • 4. 向量对向量的求导
        • 5. 矩阵对标量的求导
        • 6. 矩阵对向量的求导
      • 链式求导法则YYDS
      • 求出损失函数偏导为0时的最优解w*
      • Softmax回归的损失函数梯度推导
      • 4. 最终梯度公式

本人跟着B站李沐进行学习,卧槽,就感觉教的真的很好,相见恨晚,感觉之前都白学了。

一些简单的指令

nvidia-smi 查看CPU状态
pip install torch1.8.1+cu111 torchvision0.9.1+cu111 torchaudio==0.8.1 -f https://download.pytorch.org/whl/torch_stable.html 我用的是这个安装 pytorch,
python --version 查看python版本
conda env list 查看虚拟环境列表
conda create -n study python=3.8 创建名为study的环境
cd g: 打开G盘
jupyter notebook

数据操作

广播机制

在这里插入图片描述
把张量不一样的也进行相加处理,挺牛的。
如果数组的维度不同,较小的数组会在较大数组的前面添加维度,直到两者维度相同。
如果某个维度的大小不相同,且其中一个数组的大小为 1,较小数组会沿着该维度重复。
如果某个维度的大小不相同且都不为 1,则无法进行广播,会引发错误。

标量,向量,矩阵的相互求导

在这里插入图片描述

1. 标量对标量的求导
  • 定义:如果有两个标量函数 f ( x ) f(x) f(x) g ( x ) g(x) g(x),则 f f f 关于 g g g 的导数为:
    d f d g \frac{df}{dg} dgdf
2. 标量对向量的求导
  • 定义:如果 f ( x ) f(\mathbf{x}) f(x) 是标量函数, x \mathbf{x} x n n n-维向量,则 f f f 相对于 x \mathbf{x} x 的导数为梯度向量:
    ∇ x f = ( ∂ f ∂ x 1 , ∂ f ∂ x 2 , … , ∂ f ∂ x n ) \nabla_{\mathbf{x}} f = \left( \frac{\partial f}{\partial x_1}, \frac{\partial f}{\partial x_2}, \ldots, \frac{\partial f}{\partial x_n} \right) xf=(x1f,x2f,,xnf)
3. 向量对标量的求导
  • 定义:如果一个向量函数 F ( x ) \mathbf{F}(x) F(x) 的每个分量都是标量 x x x 的函数,则其导数为:
    d F d x = ( d F 1 d x , d F 2 d x , … , d F n d x ) \frac{d\mathbf{F}}{dx} = \left( \frac{dF_1}{dx}, \frac{dF_2}{dx}, \ldots, \frac{dF_n}{dx} \right) dxdF=(dxdF1,dxdF2,,dxdFn)
4. 向量对向量的求导
  • 定义:如果 F ( x ) \mathbf{F}(\mathbf{x}) F(x) 是一个从 n n n-维向量到 m m m-维向量的函数,则导数为雅可比矩阵:
    J = [ ∂ F ∂ x ] = [ ∂ F 1 ∂ x 1 ⋯ ∂ F 1 ∂ x n ⋮ ⋱ ⋮ ∂ F m ∂ x 1 ⋯ ∂ F m ∂ x n ] J = \left[ \frac{\partial \mathbf{F}}{\partial \mathbf{x}} \right] = \begin{bmatrix} \frac{\partial F_1}{\partial x_1} & \cdots & \frac{\partial F_1}{\partial x_n} \\ \vdots & \ddots & \vdots \\ \frac{\partial F_m}{\partial x_1} & \cdots & \frac{\partial F_m}{\partial x_n} \end{bmatrix} J=[xF]= x1F1x1FmxnF1xnFm
5. 矩阵对标量的求导
  • 定义:如果一个矩阵 M ( x ) \mathbf{M}(x) M(x) 的每个元素都是标量 x x x 的函数,则其导数是一个相同维度的矩阵:
    d M d x = [ d M 11 d x ⋯ d M 1 n d x ⋮ ⋱ ⋮ d M m 1 d x ⋯ d M m n d x ] \frac{d\mathbf{M}}{dx} = \begin{bmatrix} \frac{dM_{11}}{dx} & \cdots & \frac{dM_{1n}}{dx} \\ \vdots & \ddots & \vdots \\ \frac{dM_{m1}}{dx} & \cdots & \frac{dM_{mn}}{dx} \end{bmatrix} dxdM= dxdM11dxdMm1dxdM1ndxdMmn
6. 矩阵对向量的求导
  • 定义:当矩阵 M ( x ) \mathbf{M}(\mathbf{x}) M(x) 的每个元素都是向量 x \mathbf{x} x 的函数时,求导结果是一个由雅可比矩阵组成的三维张量。

这些求导关系是理解多变量函数变化和优化算法的基础,广泛应用于解析力学、量子力学和机器学习等领域。

链式求导法则YYDS

在这里插入图片描述

求出损失函数偏导为0时的最优解w*

在机器学习中,求解最优参数 w ∗ w^* w 通常是通过使损失函数对参数的偏导数为 0 来实现的,这意味着我们需要找到损失函数的最小值或极小值点

1. 损失函数的定义

设损失函数为 L ( w ) L(w) L(w),它表示模型预测与实际值之间的差异。最常见的损失函数包括平方损失(用于回归)和交叉熵损失(用于分类)。

例如,对于线性回归中的平方损失函数:
L ( x , y , w ) = 1 2 ∑ i = 1 n ( y i − x i T w ) 2 L(\mathbf{x},y ,w) = \frac{1}{2} \sum_{i=1}^n (y_i - \mathbf{x}_i^T w)^2 L(x,y,w)=21i=1n(yixiTw)2
其中, x i \mathbf{x}_i xi 是第 i i i 个样本的输入, y i y_i yi 是第 i i i 个样本的真实输出, w w w 是模型的参数。

2. 对参数 w w w 求偏导

我们对损失函数 L ( w ) L(w) L(w) 关于参数 w w w 求偏导数,得到梯度 ∇ w L ( w ) \nabla_w L(w) wL(w)。例如,对于平方损失函数,其梯度为:
∇ w L ( w ) = − ∑ i = 1 n ( y i − x i T w ) x i \nabla_w L(w) = -\sum_{i=1}^n (y_i - \mathbf{x}_i^T w) \mathbf{x}_i wL(w)=i=1n(yixiTw)xi

3. 设置梯度为 0

为了找到损失函数的极小值点,我们需要让梯度为 0:
∇ w L ( w ) = 0 \nabla_w L(w) = 0 wL(w)=0
将上面的梯度公式代入,得到:
∑ i = 1 n ( y i − x i T w ) x i = 0 \sum_{i=1}^n (y_i - \mathbf{x}_i^T w) \mathbf{x}_i = 0 i=1n(yixiTw)xi=0

4. 解方程求 w ∗ w^* w

通过解上面的方程,我们可以得到最优解 w ∗ w^* w

我们来详细求解方程:
∑ i = 1 n ( y i − x i T w ) x i = 0 \sum_{i=1}^n (y_i - \mathbf{x}_i^T w) \mathbf{x}_i = 0 i=1n(yixiTw)xi=0

  1. 将方程展开
    将括号展开,可以得到:
    ∑ i = 1 n y i x i − ∑ i = 1 n ( x i T w ) x i = 0 \sum_{i=1}^n y_i \mathbf{x}_i - \sum_{i=1}^n (\mathbf{x}_i^T w) \mathbf{x}_i = 0 i=1nyixii=1n(xiTw)xi=0

其中, x i T w \mathbf{x}_i^T w xiTw 是标量, x i \mathbf{x}_i xi 是向量。因此,我们可以重写第二项为:
∑ i = 1 n y i x i − ∑ i = 1 n x i x i T w = 0 \sum_{i=1}^n y_i \mathbf{x}_i - \sum_{i=1}^n \mathbf{x}_i \mathbf{x}_i^T w = 0 i=1nyixii=1nxixiTw=0
2. 移项
∑ i = 1 n y i x i = ∑ i = 1 n x i x i T w \sum_{i=1}^n y_i \mathbf{x}_i = \sum_{i=1}^n \mathbf{x}_i \mathbf{x}_i^T w i=1nyixi=i=1nxixiTw
3. 将求和写为矩阵形式
X \mathbf{X} X 是输入数据矩阵,其每一行为 x i T \mathbf{x}_i^T xiT,即:
X = [ x 1 T x 2 T ⋮ x n T ] \mathbf{X} = \begin{bmatrix} \mathbf{x}_1^T \\ \mathbf{x}_2^T \\ \vdots \\ \mathbf{x}_n^T \end{bmatrix} X= x1Tx2TxnT

此时,向量 y \mathbf{y} y 表示输出:
y = [ y 1 y 2 ⋮ y n ] \mathbf{y} = \begin{bmatrix} y_1 \\ y_2 \\ \vdots \\ y_n \end{bmatrix} y= y1y2yn

所以, ∑ i = 1 n y i x i \sum_{i=1}^n y_i \mathbf{x}_i i=1nyixi 可以写作 X T y \mathbf{X}^T \mathbf{y} XTy,而 ∑ i = 1 n x i x i T \sum_{i=1}^n \mathbf{x}_i \mathbf{x}_i^T i=1nxixiT 可以写作 X T X \mathbf{X}^T \mathbf{X} XTX。方程变为:
X T y = X T X w \mathbf{X}^T \mathbf{y} = \mathbf{X}^T \mathbf{X} w XTy=XTXw

  1. 求解 w w w
    假设 X T X \mathbf{X}^T \mathbf{X} XTX 是可逆的,我们可以两边同时乘以 ( X T X ) − 1 (\mathbf{X}^T \mathbf{X})^{-1} (XTX)1,得到:
    w = ( X T X ) − 1 X T y w = (\mathbf{X}^T \mathbf{X})^{-1} \mathbf{X}^T \mathbf{y} w=(XTX)1XTy

这就是线性回归中通过最小二乘法求解得到的最优解 w ∗ w^* w
如果 X T X \mathbf{X}^T \mathbf{X} XTX 不可逆,可能需要使用正则化等方法来处理。
w ∗ = ( X T X ) − 1 X T y w^* = (\mathbf{X}^T \mathbf{X})^{-1} \mathbf{X}^T \mathbf{y} w=(XTX)1XTy

5. 数值优化方法

当损失函数不能直接求解闭式解时,可以使用数值优化算法,比如梯度下降法或牛顿法。梯度下降法通过反复更新参数 w w w 来逼近最优解,更新公式为:
w t + 1 = w t − η ∇ w L ( w t ) w_{t+1} = w_t - \eta \nabla_w L(w_t) wt+1=wtηwL(wt)
其中 η \eta η 是学习率。

Softmax回归的损失函数梯度推导

在这里插入图片描述
来源:B站https://www.bilibili.com/video/BV1K64y1Q7wu/?p=2&spm_id_from=pageDriver&vd_source=591a381cfce5c2eccb909df0428d1ee4评论sudo_rm_-rf

  1. Softmax函数的定义
    假设我们有一个输入向量 z = [ z 1 , z 2 , … , z n ] \mathbf{z} = [z_1, z_2, \dots, z_n] z=[z1,z2,,zn],经过Softmax变换后的输出是:
    y ^ i = e z i ∑ j = 1 n e z j \hat{y}_i = \frac{e^{z_i}}{\sum_{j=1}^{n} e^{z_j}} y^i=j=1nezjezi
    其中, y ^ i \hat{y}_i y^i 表示输入 z i z_i zi 对应的Softmax输出, ∑ j = 1 n e z j \sum_{j=1}^{n} e^{z_j} j=1nezj 是所有输入的指数和,用来归一化概率。

  2. 交叉熵损失函数的定义
    假设我们有一个真实标签向量 y = [ y 1 , y 2 , … , y n ] \mathbf{y} = [y_1, y_2, \dots, y_n] y=[y1,y2,,yn],其中每个 y i y_i yi 0 0 0 1 1 1,表示该样本属于第 i i i 类。交叉熵损失函数的定义为:
    L = − ∑ i = 1 n y i log ⁡ ( y ^ i ) L = -\sum_{i=1}^{n} y_i \log(\hat{y}_i) L=i=1nyilog(y^i)
    这个损失函数用于衡量预测概率分布 y ^ \hat{\mathbf{y}} y^ 和真实标签分布 y \mathbf{y} y 之间的差异。
    交叉熵损失函数(Cross-Entropy Loss)是机器学习和深度学习中用于分类任务的一种常用损失函数,特别是在多分类任务中常与Softmax函数一起使用。它用来衡量模型的输出概率分布和真实标签之间的差异。其本质是计算两个概率分布之间的距离,距离越小,模型的预测越接近真实结果。

对于单个样本,假设真实标签为 y i y_i yi,模型的预测概率为 y ^ i \hat{y}_i y^i,其中 y i y_i yi 表示样本所属的真实类别, y ^ i \hat{y}_i y^i 表示模型预测的该类别的概率。那么,二分类问题的交叉熵损失函数定义为:

L = − [ y log ⁡ ( y ^ ) + ( 1 − y ) log ⁡ ( 1 − y ^ ) ] L = - \left[ y \log(\hat{y}) + (1 - y) \log(1 - \hat{y}) \right] L=[ylog(y^)+(1y)log(1y^)]

这个公式表达了当真实类别为 y = 1 y = 1 y=1 y = 0 y = 0 y=0 时的损失。其含义是:

  • 如果样本的真实标签是 y = 1 y = 1 y=1,我们希望模型预测的 y ^ \hat{y} y^ 越接近 1 损失越小。
  • 如果样本的真实标签是 y = 0 y = 0 y=0,我们希望模型预测的 y ^ \hat{y} y^ 越接近 0 损失越小。

举个例子:假设我们有一个 3 类分类问题,模型的预测概率输出为:
y ^ = [ 0.7 , 0.2 , 0.1 ] \hat{\mathbf{y}} = [0.7, 0.2, 0.1] y^=[0.7,0.2,0.1]

真实的标签为第二类,也就是说真实标签的 one-hot 编码为:(原来独热编码就是这么简单的东西)
y = [ 0 , 1 , 0 ] \mathbf{y} = [0, 1, 0] y=[0,1,0]

交叉熵损失计算为:
L = − ∑ i = 1 3 y i log ⁡ ( y ^ i ) = − [ 0 ⋅ log ⁡ ( 0.7 ) + 1 ⋅ log ⁡ ( 0.2 ) + 0 ⋅ log ⁡ ( 0.1 ) ] = − log ⁡ ( 0.2 ) = 1.609 L = - \sum_{i=1}^{3} y_i \log(\hat{y}_i) = -[0 \cdot \log(0.7) + 1 \cdot \log(0.2) + 0 \cdot \log(0.1)] = -\log(0.2) = 1.609 L=i=13yilog(y^i)=[0log(0.7)+1log(0.2)+0log(0.1)]=log(0.2)=1.609

在这种情况下,由于模型对真实类别的概率预测较低( 0.2 0.2 0.2),所以交叉熵损失较大。模型需要通过优化减少这个损失,使得预测更接近真实标签。

  1. 梯度推导
    为了推导损失函数关于输入 z \mathbf{z} z 的梯度,我们需要分别求 L L L 关于 z \mathbf{z} z 的偏导数。
    好的,我们来逐步推导Softmax回归损失函数的梯度公式。首先,我们先理解Softmax回归的基本概念和损失函数。

3.1. 损失函数的展开

将损失函数 ( L(y, z) ) 展开为:

L ( y , z ) = − ∑ i = 1 K y i log ⁡ ( e z i ∑ j = 1 K e z j ) L(y, z) = -\sum_{i=1}^{K} y_i \log\left(\frac{e^{z_i}}{\sum_{j=1}^{K} e^{z_j}}\right) L(y,z)=i=1Kyilog(j=1Kezjezi)

可以化简为:

L ( y , z ) = − ∑ i = 1 K y i z i + log ⁡ ( ∑ j = 1 K e z j ) L(y, z) = -\sum_{i=1}^{K} y_i z_i + \log\left(\sum_{j=1}^{K} e^{z_j}\right) L(y,z)=i=1Kyizi+log(j=1Kezj)

3.2. 计算梯度

现在我们需要计算 :

  1. 对第一项求导
    ∂ ∂ z i ( − ∑ k = 1 K y k z k ) = − y i \frac{\partial}{\partial z_i} \left(-\sum_{k=1}^{K} y_k z_k\right) = -y_i zi(k=1Kykzk)=yi

  2. 对第二项求导
    ∂ ∂ z i log ⁡ ( ∑ j = 1 K e z j ) = 1 ∑ j = 1 K e z j ⋅ ∂ ∂ z i ( ∑ j = 1 K e z j ) = e z i ∑ j = 1 K e z j = σ ( z i ) \frac{\partial}{\partial z_i} \log\left(\sum_{j=1}^{K} e^{z_j}\right) = \frac{1}{\sum_{j=1}^{K} e^{z_j}} \cdot \frac{\partial}{\partial z_i}\left(\sum_{j=1}^{K} e^{z_j}\right) = \frac{e^{z_i}}{\sum_{j=1}^{K} e^{z_j}} = \sigma(z_i) zilog(j=1Kezj)=j=1Kezj1zi(j=1Kezj)=j=1Kezjezi=σ(zi)

  3. 合并结果
    将两部分结合起来,得到损失函数的梯度:
    ∂ L ∂ z i = − y i + σ ( z i ) \frac{\partial L}{\partial z_i} = -y_i + \sigma(z_i) ziL=yi+σ(zi)

4. 最终梯度公式

因此,Softmax回归损失函数关于 logits ( z_i ) 的梯度为:

∂ L ∂ z i = σ ( z i ) − y i \frac{\partial L}{\partial z_i} = \sigma(z_i) - y_i ziL=σ(zi)yi
只勉强看懂思路,整体看不太懂。害就这样吧。
补充说明

  • 这个推导中使用的交叉熵损失是基于离散的类别标签,因此每个 y j y_j yj 只有一个值为 1 1 1,其余均为 0 0 0

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

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

相关文章

卷轴模式商城APP开发指南

卷轴模式商城APP的开发是一项融合了技术创新、用户体验优化与商业策略实施的综合性工程。本文将从程序员的角度出发,详细介绍该类型应用的开发流程,涵盖从需求分析到后期维护的各个环节。 一、需求分析 首先,明确APP的核心功能需求&#xff…

从0-1搭建海外社媒矩阵,详细方案深度拆解

做买卖,好的产品质量固然是关键,但如何让更多的消费者知道?营销推广是必不可少的。在互联网时代,通过社交媒体推广已经成为跨境电商卖家常用的广告手段。 如何通过海外社交媒体矩阵扩大品牌影响力,实现营销目标&#…

又一篇Nature!可解释GNN今年持续发力,创新思路有时候就这么简单!

最近发现了一篇优秀的Nature子刊论文,作者提出了一种基于可解释GNN癌症基因分析新框架,在预测任务中实现了卓越的性能表现。 除此之外,还出现了很多可解释GNN的新研究,其中顶会不少,可见无论在学术界和工业界&#xf…

AES CCM详解

AES CCM是一种对数据进行加密及完整性检查的算法,主要用到AES中的CBC(完整性检查)和CTR(对明文进行加密),除此之外,还涉及到对数据的格式化(本文着重阐述)。 文章目录 加密过程STEPS 解密及校验过程STEPS 格式化B0的构成B0解析举例AAD的格式化…

企业微信扫码登录

请求url 可以看到如下结果: 请求的URL是 reqauth.aspx,这是发起认证的第一步,这个请求的返回结果是一个 XML 数据,包含一个 ReqID,用户授权的地址 AuthUrl 以及查询结果的地址 ResultUrl。 如果直接访问这个地址&…

sysctl 命令:Linux内核参数管理

一、命令简介 ​sysctl​是一个用于查看、设置和管理内核参数的命令行工具。 ‍ 二、命令参数 sysctl [选项] [内核参数]选项: ​-a​, --all​: 显示所有参数及其当前值。​-n​: 仅显示值,不显示参数名。​-w​: 设置参数的值。 ‍ 三、命令示例 查看所有…

理解:基础地理实体相关概述

理解:基础地理实体相关概述 地理实体 geo-entity 现实世界中占据一定且连续空间位置和范围、单独具有同一属 性或完整功能的地理对象。 基础地理实体 fundamental geo-entity 通过基础测绘采集和表达的地理实体,是其他地理实体和相关 信息的定位框架与…

Spring Security 是一个强大的和高度可定制的身份验证和访问控制框架。它是 Spring 项目家族的一员,用于构建安全的 Java 应用程序。

Spring Security 是一个强大的和高度可定制的身份验证和访问控制框架。它是 Spring 项目家族的一员,用于构建安全的 Java 应用程序。Spring Security 提供了全面的安全服务,从基本的登录认证到复杂的访问控制,几乎涵盖了所有与安全相关的需求…

线程与线程安全,生产消费者模型

线程与进程 2390. 从字符串中移除星号 给你一个包含若干星号 * 的字符串 s 。 在一步操作中,你可以: 选中 s 中的一个星号。移除星号 左侧 最近的那个 非星号 字符,并移除该星号自身。 返回移除 所有 星号之后的字符串**。** 注意&#xff1a…

ubuntu 设置静态IP

一、 ip addresssudo nano /etc/netplan/50-cloud-init.yaml 修改前: 修改后: # This file is generated from information provided by the datasource. Changes # to it will not persist across an instance reboot. To disable cloud-inits # ne…

深度解析与解决方案:U盘有盘符但无法打开的困境

引言:U盘困境初现 在日常工作与生活中,U盘作为便携式存储设备,扮演着数据传输与备份的重要角色。然而,不少用户会遇到这样一个棘手问题:U盘在插入电脑后能够正常显示盘符,但尝试打开时却遭遇拒绝访问或提示…

巧用时间换空间:解读 ArcGraph 如何灵活应对有限内存下的图分析

导读:ArcGraph 是一款云原生架构、存查分析一体化的分布式图数据库。本文将详细解读 ArcGraph 如何灵活应对有限内存下的图分析。 01 引言 在图分析技术广泛应用的当下,学术界和各大图数据库厂商热衷于提升图分析技术的高性能指标。然而,追求…

STM32嵌入式编程学习到提高:【5】delay函数

------------------------------------------------------------------------------------------------------------------------- 工程文件:放在百度云盘里,需要的自行下载!!! 链接:http:// https://pan.baidu.com/s…

【3D分割】Segment Anything in 3D with Radiance Fields

论文链接:Segment Anything in 3D with Radiance Fields 代码链接:GitHub - Jumpat/SegmentAnythingin3D: Segment Anything in 3D with NeRFs (NeurIPS 2023) 作者:Jiazhong Cen, Jiemin Fang, Zanwei Zhou, Chen Yang, Lingxi Xie, Xiaop…

DataLight(V1.4.5) 版本更新,新增 Ranger、Solr

DataLight(V1.4.5) 版本更新,新增 Ranger、Solr DataLight 迎来了重大的版本更新,现已发布 V1.4.5 版本。本次更新对平台进行了较多的功能拓展和优化,新增了对 Ranger 和 Solr 服务组件的支持,同时对多项已…

微服务的优点及在云原生时代的合理落地方式

云计算de小白 那么,微服务到底能给业务带来什么好处?在云原生时代,如何更合理地实现微服务? 架构没有好坏之分,只有适合与不适合。然而,当我们对比微服务架构与单体架构时,可以发现微服务有以…

【【通信协议之UDP协议】】

通信协议之UDP协议 UDP (user Datagram Protocol )用户数据报协议 整个的UDP数据格式 如下所示 TCP协议与UDP协议的区别 TCP协议面向连接,是流传输协议,通过连接发送数据,而 UDP 协议传输不需要连接,是数据包协议 …

[3]Opengl ES着色器

术语: VertexShader:顶点着色器,用来描述图形图像位置的顶点坐标; FragmentShader:片元着色器,用来给顶点指定的区域进行着色; Vertex:顶点 Texture:纹理…

【中级通信工程师】终端与业务(十一):市场营销计划、实施与控制

【零基础3天通关中级通信工程师】 终端与业务(十一):市场营销计划、实施与控制 本文是中级通信工程师考试《终端与业务》科目第十一章《市场营销计划、实施与控制》的复习资料和真题汇总。本章的核心内容涵盖了市场营销计划的编制、实施过程以及控制方式&#xff0…

【Java异常】(简简单单拿捏)

【Java异常】(简简单单拿捏) 1. 异常的简单介绍2. 异常的抛出2.1 语法 3. 异常的处理3.1 异常声明throws3.2 try-catch捕获并处理 4. 例子(try-catch自定义异常) 1. 异常的简单介绍 程序员在运行代码时会遇到很多异常&#xff0c…