机器学习6——线性分类函数

线性分类函数

  • 分类问题的两种决策方法:

    • 概率方法:通过计算后验概率进行分类。优点是在概率分布已知的情况下可以得到最优解,缺点是实际中概率密度通常未知,需要通过大量数据估计。
    • 判别方法:假设判别函数的形式已知,通过训练样本估计判别函数的参数。优点是实现简单,缺点是需要假设函数的形式,可能不适合复杂数据。
  • 线性判别函数定义为:
    g i ( x ) = w i T x + w i 0 g_i(\mathbf{x}) = \mathbf{w}_i^T \mathbf{x} + w_{i0} gi(x)=wiTx+wi0

    • 易于计算,分析,学习
    • 通过最小化损失函数来学习
    • 需要数据线性可分
    • 训练误差小不能保证测试误差小
  • 线性判别函数的决策面推导:

    • 决策面定义:$ g(\mathbf{x}) = 0 $,即: w T x + w 0 = 0 \mathbf{w}^T \mathbf{x} + w_0 = 0 wTx+w0=0

      推导: g ( x ) = w T x + w T w ∥ w ∥ 2 w 0 = 0 g(\mathbf{x}) = \mathbf{w}^T \mathbf{x} + \frac{\mathbf{w}^T \mathbf{w}}{\|\mathbf{w}\|^2} w_0 = 0 g(x)=wTx+w2wTww0=0

      w T ( x + w 0 ∥ w ∥ 2 w ) = 0 \mathbf{w}^T \left( \mathbf{x} + \frac{w_0}{\|\mathbf{w}\|^2} \mathbf{w} \right) = 0 wT(x+w2w0w)=0

      • w 是超平面的法向量,决定其方向。
      • w 0 ∥ w ∥ 2 w \frac{w_0}{\|\mathbf{w}\|^2} \mathbf{w} w2w0w表示超平面相对于原点的偏移。
  • 增广向量

    我们希望把这个线性函数写成没有显式偏置项的形式:
    g ( x ) = w T x + w 0 ⇒ a T y g(\mathbf{x}) = \mathbf{w}^T \mathbf{x} + w_0 \quad \Rightarrow \quad \mathbf{a}^T \mathbf{y} g(x)=wTx+w0aTy
    为此,引入两个新的概念:

    1. 增广样本向量(augmented vector):
      y = [ x 1 ] ∈ R d + 1 \mathbf{y} = \begin{bmatrix} \mathbf{x} \\ 1 \end{bmatrix} \in \mathbb{R}^{d+1} y=[x1]Rd+1
      —— 就是在原向量 x \mathbf{x} x 后面补一个 1。

    2. 增广权重向量
      a = [ w w 0 ] ∈ R d + 1 \mathbf{a} = \begin{bmatrix} \mathbf{w} \\ w_0 \end{bmatrix} \in \mathbb{R}^{d+1} a=[ww0]Rd+1

    于是有:
    g ( x ) = w T x + w 0 = a T y g(\mathbf{x}) = \mathbf{w}^T \mathbf{x} + w_0 = \mathbf{a}^T \mathbf{y} g(x)=wTx+w0=aTy
    这样就把原来有偏置项的表达式转换成了一个 统一的向量内积形式

  • 线性可分的形式化定义

    • 给定样本集合 y 1 , y 2 , … , y n y_1, y_2, \ldots, y_n y1,y2,,yn,部分标记为 ω 1 \omega_1 ω1,部分为 ω 2 \omega_2 ω2

      如果存在一个向量 a a a,使得:

      • a T y i > 0 a^T y_i > 0 aTyi>0,当 y i y_i yi 属于 ω 1 \omega_1 ω1
      • a T y i < 0 a^T y_i < 0 aTyi<0,当 y i y_i yi 属于 ω 2 \omega_2 ω2
  • 权重空间的解区域

    • 若将类别 ω 2 \omega_2 ω2 的样本统一变号,即:
      y i ← − y i , 当  y i ∈ ω 2 y_i \leftarrow -y_i, \quad \text{当 } y_i \in \omega_2 yiyi, yiω2
      则线性可分性的问题就变成了:
      ∀ i , a T y i > 0 \forall i, \quad a^T y_i > 0 i,aTyi>0
      即,所有样本点在向量 a a a 的方向上都有正投影

    • 如果所有样本 y i T a > 0 y_i^T a > 0 yiTa>0,那么这些 a a a 向量就构成了解空间。

    • PPT 上给出了缩小解空间的一种方式:引入“边界”(margin),要求 y i T a > b i y_i^T a > b_i yiTa>bi,而不是只是大于0。这里 b i > 0 b_i > 0 bi>0,常用形式是 b i = 1 ∥ a ∥ b_i = \frac{1}{\|a\|} bi=a1,即边界和法向量成反比。

  • 准则函数

    • 衡量错误或者代价

    • 目标是最小化它的值

    • 转化为函数优化问题

    • 感知机的准则函数举例:

      • J ( w , b ) = − ∑ i = 1 n sign [ ω i ⋅ g ( x i ) ] J(\mathbf{w}, b) = - \sum_{i=1}^n \text{sign}[\omega_i \cdot g(\mathbf{x}_i)] J(w,b)=i=1nsign[ωig(xi)]
      • J ( w , b ) = − ∑ i = 1 n ω i ⋅ g ( x i ) J(\mathbf{w}, b) = - \sum_{i=1}^n \omega_i \cdot g(\mathbf{x}_i) J(w,b)=i=1nωig(xi)
      • J ( w , b ) = ∑ i = 1 n ( g ( x i ) − ω i ) 2 J(\mathbf{w}, b) = \sum_{i=1}^n (g(\mathbf{x}_i) - \omega_i)^2 J(w,b)=i=1n(g(xi)ωi)2

      ω i ∈ − 1 , + 1 \omega_i \in {-1, +1} ωi1,+1 是样本 x i x_i xi 的真实标签。

梯度下降算法

想象需要优化的函数是一座山,沿着下山方向下山

  • 根据泰勒公式展开:
    f ( x + Δ x ) ≈ f ( x ) + ∇ f ( x ) ⊤ Δ x + o ( ∥ Δ x ∥ ) ⏟ 高阶小量 f(x + \Delta x) \approx f(x) + \nabla f(x)^\top \Delta x + \underbrace{o(\|\Delta x\|)}_{\text{高阶小量}} f(x+Δx)f(x)+f(x)Δx+高阶小量 o(∥Δx)
    如果我们取:
    Δ x = − η ∇ f ( x ) \Delta x = -\eta \nabla f(x) Δx=ηf(x)
    代入得:
    f ( x + Δ x ) ≈ f ( x ) − η ∇ f ( x ) ⊤ ∇ f ( x ) = f ( x ) − η ∥ ∇ f ( x ) ∥ 2 f(x + \Delta x) \approx f(x) - \eta \nabla f(x)^\top \nabla f(x) = f(x) - \eta \|\nabla f(x)\|^2 f(x+Δx)f(x)ηf(x)f(x)=f(x)η∥∇f(x)2
    由于 η > 0 \eta > 0 η>0,且 ∥ ∇ f ( x ) ∥ 2 ≥ 0 \|\nabla f(x)\|^2 \geq 0 ∥∇f(x)20,所以有:
    f ( x + Δ x ) ≤ f ( x ) f(x + \Delta x) \leq f(x) f(x+Δx)f(x)

  • 梯度下降的迭代流程:

    1. 初始化 x 0 x_0 x0

    2. 设置学习率 η > 0 \eta > 0 η>0 和收敛阈值 ϵ \epsilon ϵ

    3. 重复执行:
      x k + 1 = x k − η ∇ f ( x k ) x_{k+1} = x_k - \eta \nabla f(x_k) xk+1=xkηf(xk)
      直到梯度的模很小(即差不多到最低点)。

    学习率太大→跳跃,太小→收敛慢。

牛顿法

  • 先从一维开始(找方程的根)

    目标:解一个方程: f ( x ) = 0 f(x) = 0 f(x)=0。我们想找一个 x x x,使得函数在该点为 0。

    • 基本思路

      1. 从一个初始点 x 0 x_0 x0 出发;
      2. 用函数的切线来逼近根;
      3. 一步步更新 x 1 , x 2 , x 3 , … x_1, x_2, x_3, \dots x1,x2,x3,,越来越接近真解。
    • 数学推导(重点)

      • 给定当前点 x k x_k xk,在该点做一个切线(用一阶泰勒展开):

      f ( x ) ≈ f ( x k ) + f ′ ( x k ) ( x − x k ) f(x) \approx f(x_k) + f'(x_k)(x - x_k) f(x)f(xk)+f(xk)(xxk)

      • 我们希望 f ( x ) = 0 f(x) = 0 f(x)=0,代入这个近似式:

      f ( x k ) + f ′ ( x k ) ( x − x k ) = 0 f(x_k) + f'(x_k)(x - x_k) = 0 f(xk)+f(xk)(xxk)=0

      解得:
      x = x k − f ( x k ) f ′ ( x k ) x = x_k - \frac{f(x_k)}{f'(x_k)} x=xkf(xk)f(xk)
      这就是 牛顿法的一维更新公式
      x k + 1 = x k − f ( x k ) f ′ ( x k ) x_{k+1} = x_k - \frac{f(x_k)}{f'(x_k)} xk+1=xkf(xk)f(xk)
      在这里插入图片描述

  • 多维扩展(用于优化)

    当我们不再是解方程,而是要 最小化一个函数 f ( x ) f(\mathbf{x}) f(x)
    目标: min ⁡ f ( x ) \min f(\mathbf{x}) minf(x)
    我们要找一个点 x ∗ \mathbf{x}^* x,使得 f ( x ) f(\mathbf{x}) f(x) 最小,也就是 ∇ f ( x ) = 0 \nabla f(\mathbf{x}) = 0 f(x)=0

    • 思路

      在高维情况下,我们可以使用 泰勒二阶展开式 来近似 f ( x + Δ x ) f(\mathbf{x} + \Delta \mathbf{x}) f(x+Δx)
      f ( x + Δ x ) ≈ f ( x ) + ∇ f ( x ) T Δ x + 1 2 Δ x T H ( x ) Δ x f(\mathbf{x} + \Delta \mathbf{x}) \approx f(\mathbf{x}) + \nabla f(\mathbf{x})^T \Delta \mathbf{x} + \frac{1}{2} \Delta \mathbf{x}^T H(\mathbf{x}) \Delta \mathbf{x} f(x+Δx)f(x)+f(x)TΔx+21ΔxTH(x)Δx
      其中:

      • ∇ f ( x ) \nabla f(\mathbf{x}) f(x):一阶导数(梯度向量)
      • H ( x ) H(\mathbf{x}) H(x):二阶导数矩阵(Hessian矩阵)
    • 目标:让这个函数值最小!

      我们对上面的展开式求导,令导数为 0(为什么?一个函数在某点取得极小值(或极大值),该点的导数为零(如果导数存在)),有:
      ∇ f ( x ) + H ( x ) Δ x = 0 ⇒ Δ x = − H ( x ) − 1 ∇ f ( x ) \nabla f(\mathbf{x}) + H(\mathbf{x}) \Delta \mathbf{x} = 0 \Rightarrow \Delta \mathbf{x} = - H(\mathbf{x})^{-1} \nabla f(\mathbf{x}) f(x)+H(x)Δx=0Δx=H(x)1f(x)
      于是就得到 牛顿法的多维更新公式
      x k + 1 = x k − H − 1 ( x k ) ∇ f ( x k ) \mathbf{x}_{k+1} = \mathbf{x}_k - H^{-1}(\mathbf{x}_k) \nabla f(\mathbf{x}_k) xk+1=xkH1(xk)f(xk)

  • 为什么一维只展开一阶项,多维要展开到二阶项?多维可以只展开一项吗?或者展开更多项?

    因为在做什么问题!

    • 一维时:

      我们只是想找根(即 f ( x ) = 0 f(x) = 0 f(x)=0
      所以我们只需要一阶导数的切线逼近:
      f ( x ) ≈ f ( x k ) + f ′ ( x k ) ( x − x k ) f(x) \approx f(x_k) + f'(x_k)(x - x_k) f(x)f(xk)+f(xk)(xxk)
      设这个近似函数等于0即可。

    • 多维优化时:

      我们要找极小值,不只是找根。

      这时一阶导数并不能判断拐点类型(极大?极小?拐点?),必须引入二阶信息(曲率):
      f ( x + Δ x ) ≈ f ( x ) + ∇ f ( x ) T Δ x + 1 2 Δ x T H Δ x f(\mathbf{x} + \Delta \mathbf{x}) \approx f(\mathbf{x}) + \nabla f(\mathbf{x})^T \Delta \mathbf{x} + \frac{1}{2} \Delta \mathbf{x}^T H \Delta \mathbf{x} f(x+Δx)f(x)+f(x)TΔx+21ΔxTHΔx

      • 第一项:函数值
      • 第二项:梯度,方向信息
      • 第三项:Hessian,曲率信息
    • 为什么需要二阶项?

      • 如果你只看一阶项,相当于只看斜率,不知道是山顶还是山谷;
      • 二阶项(Hessian)告诉你,函数在这一点的“凹凸”:
        • Hessian 正定 → 函数局部向上开口 → 极小值 ✅
        • Hessian 负定 → 极大值 ❌
        • Hessian 不定 → 鞍点 ❗️
    • 多维可以只展开一项:这就是梯度下降法

      • 它忽略了二阶信息,只用了:

      f ( x + Δ x ) ≈ f ( x ) + ∇ f ( x ) T Δ x f(\mathbf{x} + \Delta \mathbf{x}) \approx f(\mathbf{x}) + \nabla f(\mathbf{x})^T \Delta \mathbf{x} f(x+Δx)f(x)+f(x)TΔx

      然后让 Δ x = − η ∇ f ( x ) \Delta \mathbf{x} = - \eta \nabla f(\mathbf{x}) Δx=ηf(x),即反方向下降

      但这会导致收敛慢、不稳定。

    • 也可以展开更多项,但通常没必要。

      • 泰勒展开可以无限展开高阶项:

      f ( x ) = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) + 1 2 f ′ ′ ( x 0 ) ( x − x 0 ) 2 + 1 6 f ′ ′ ′ ( x 0 ) ( x − x 0 ) 3 + … f(x) = f(x_0) + f'(x_0)(x - x_0) + \frac{1}{2}f''(x_0)(x - x_0)^2 + \frac{1}{6}f'''(x_0)(x - x_0)^3 + \dots f(x)=f(x0)+f(x0)(xx0)+21f′′(x0)(xx0)2+61f′′′(x0)(xx0)3+

      • 但高阶导数计算极其复杂;
      • 通常二阶展开就能在极小值附近拟合得很好(函数形状如碗口);
      • 这就是牛顿法停止在二阶的原因。
  • 既然目标是找极小值点,为什么不能直接对原函数求导,令导数等于0?(解析法)

    如果函数 f ( x ) f(x) f(x) 是光滑可导的,我们当然可以直接求导并令导数为0,找到所谓的极值点(极小值或极大值)。但在实际应用中,“直接求导=0”经常做不到或不现实,原因如下:

    • 函数可能没有解析解
      很多现实问题的目标函数形式太复杂,根本找不到 ∇ f ( x ) = 0 \nabla f(x) = 0 f(x)=0 的显式解,比如:

      • 函数包含 非线性嵌套结构,如: f ( x ) = log ⁡ ( 1 + e − ( A x + b ) 2 ) f(x) = \log(1 + e^{-(Ax + b)^2}) f(x)=log(1+e(Ax+b)2)
      • 参数是 高维张量(如深度学习模型中的几百万维参数)

      此时我们只能数值优化,从一个起始点出发逐步更新参数靠近最优点。

    • 即使可以求导,也可能解不出来
      举个例子:
      f ( x ) = x 5 − 3 x + 1 f(x) = x^5 - 3x + 1 f(x)=x53x+1
      对它求导是简单的:
      f ′ ( x ) = 5 x 4 − 3 f'(x) = 5x^4 - 3 f(x)=5x43
      你能显式求出解吗?不能。我们只能用牛顿法或者二分法来数值逼近根。

    • 优化法能处理约束问题
      现实中很多问题还有 约束条件
      min ⁡ f ( x ) subject to  A x ≤ b \min f(x) \quad \text{subject to } \quad Ax \leq b minf(x)subject to Axb
      这时候直接对 f ( x ) f(x) f(x) 求导=0 是无效的,你还需要引入拉格朗日乘子等技巧,或者干脆使用优化算法如:

      • 投影梯度法
      • 拉格朗日乘子法
      • 对偶法
      • 内点法、罚函数法、SLP 等等
    • 优化方法适合自动化处理
      在现代机器学习和工程中,我们希望:

      • 用程序自动优化复杂函数
      • 不依赖人工推导
      • 能处理几十万参数的模型(如深度学习)

      这时优化方法(如SGD、Adam、LBFGS)显然比“手动解导数方程”更加实用。

  • 牛顿下降方向为何更陡?

    牛顿法的下降方向更陡,是因为它不仅利用了梯度的方向,还根据 Hessian(即二阶导数信息)自适应地调整了步长和方向,使下降速度沿着最快变小的路径。

    • 梯度下降(Gradient Descent)

    Δ x = − η ∇ f ( x ) \Delta x = -\eta \nabla f(x) Δx=ηf(x)

    只用一阶导数,沿着负梯度走,小步慢慢试探。

    • 牛顿法(Newton’s Method)

    Δ x = − H − 1 ∇ f ( x ) \Delta x = - H^{-1} \nabla f(x) Δx=H1f(x)

    不仅看梯度,还用 Hessian(H)矩阵调整方向和步幅。

    数学上,牛顿法是这样构造的:

    • 近似 f ( x ) f(x) f(x) 为一个二次函数(抛物面):

    f ( x + Δ x ) ≈ f ( x ) + ∇ f ( x ) T Δ x + 1 2 Δ x T H Δ x f(x + \Delta x) \approx f(x) + \nabla f(x)^T \Delta x + \frac{1}{2} \Delta x^T H \Delta x f(x+Δx)f(x)+f(x)TΔx+21ΔxTHΔx

    • 找这个二次函数的极小值点。
    • 解出最佳 Δ x \Delta x Δx

    H Δ x = − ∇ f ( x ) ⇒ Δ x = − H − 1 ∇ f ( x ) H \Delta x = - \nabla f(x) \quad \Rightarrow \quad \Delta x = -H^{-1} \nabla f(x) HΔx=f(x)Δx=H1f(x)

    所以牛顿法每次直接跳到局部抛物线的最低点方向,而不是慢慢沿斜坡滑。

    在这里插入图片描述

  • 比较梯度下降与牛顿法:

    • 牛顿法每一步通常比简单的梯度下降法带来更大的改进,即使梯度下降使用了最优步长 η k \eta_k ηk
    • 但是,如果 Hessian 矩阵 Q Q Q 是奇异的(singular),那么牛顿法不可用。
    • 即使 Hessian Q Q Q 是非奇异的,计算它也是很耗时的,时间复杂度是 O ( d 3 ) O(d^3) O(d3)
    • 实际上,给梯度下降法设一个常数步长(即使比最优步长小一点),通常总开销比每次都精确寻找最优 η k \eta_k ηk 更低。

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

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

相关文章

Sentinel(三):Sentinel熔断降级

一、Sentinel熔断概念介绍 官方文档网址&#xff1a;circuit-breaking | Sentinel 1、Sentinel熔断基本介绍 除了流量控制以外&#xff0c;对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措 施之一。一个服务常常会调用别的模块&#xff0c;可能是另外的一个远程服…

PostgreSQL 主从集群搭建

下面是 PostgreSQL 主从复制&#xff08;Streaming Replication&#xff09;环境的安装与配置指南&#xff0c;适合在两台或多台服务器之间构建一主一从&#xff08;或一主多从&#xff09;的高可用读写分离系统。 环境准备 角色主机名/IP说明主库192.168.1.10可读写&#xff…

STM32安全固件升级:使用自定义 bootloader 实现SD卡固件升级,包含固件加密

前言 在 STM32 嵌入式开发中&#xff0c;Bootloader 是一个不可或缺的模块。ST 公司为 STM32 提供了功能完备的官方 Bootloader&#xff0c;支持多种通信接口&#xff08;如 USART、USB DFU、I2C、SPI 等&#xff09;&#xff0c;适用于标准的固件更新方案。 然而&#xff0c…

一步部署APache编译安装脚本

接下来我来介绍以下编译安装的好处 编译安装的优点与缺点 一、优点 高度可定制 可根据实际需求启用或关闭特性&#xff08;如 Apache 的模块、MySQL 的引擎等&#xff09;。 灵活控制编译参数、优化性能&#xff08;如 --enable-xxx、--with-xxx&#xff09;。 更高的性能…

[Linux]mmap()函数内存映射原理及用法

一、内存映射 内存映射&#xff0c;简而言之就是将用户空间的一段内存区域映射到内核空间&#xff0c;映射成功后&#xff0c;用户对这段内存区域的修改可以直接反映到内核空间&#xff0c;同样&#xff0c;内核空间对这段区域的修改也直接反映用户空间。那么对于内核空间和用…

通信无BUG,ethernet ip转profinet网关,汽车焊接设备通信有心机

在运用“激光钎焊”对汽车车顶、侧面板、后行李箱盖等位置进行接合时&#xff0c;必须配备能够沿着复杂车身线条&#xff0c;对细窄焊接线实施高精度快速检测及模仿控制的“焊缝跟踪控制”。 那么汽车生产线的系统升级改造迫在眉睫&#xff0c;当西门子PLC和库卡机器人无法通信…

python脚本ETH获取最新发行版本并将是否更新信息发送到钉钉

import requests import json import time import hmac import hashlib import base64 import urllib.parse# 1. 配置钉钉机器人 webhook "https://oapi.dingtalk.com/robot/send?access_tokenXXX" secret "XXX" # 如果没有加签验证&#xff0c;请设…

【Docker基础】Docker容器管理:docker ps及其参数详解

目录 1 docker ps命令概述 1.1 命令定位与作用 1.2 命令基本语法 2 基础参数详解 2.1 默认输出解析 2.2 核心参数解析 2.2.1 -a, --all 2.2.2 -q, --quiet 2.2.3 --no-trunc 3 高级过滤与格式化 3.1 过滤器(--filter)详解 3.1.1 常用过滤条件 3.1.2 实际应用示例 …

应急响应-感染Neshta病毒

病毒确定&#xff1a; 根据感染现象确定为Virus/Win32.Neshta家族病毒 病毒表现&#xff1a; 该病毒为感染式病毒。该病毒会在系统%SystemRoot%目录下释放svchost.com文件&#xff0c;并通过添加注册表的方式确保每个exe文件执行的时候都会先执行这个文件。该病毒还会收集系统信…

Hyperledger Fabric 入门笔记(二十)Fabric V2.5 测试网络进阶之Tape性能测试

文章目录 前言一、介绍二、架构三、安装说明四、使用方法4.1. 修改配置文件4.2. 启动测试网络4.3. 运行测试 前言 本文介绍由Hyperledger中国技术工作组提供的另一款区块链网络性能测试工具Tape的架构、安装和在Fabric测试网络中的使用。 一、介绍 Tape是一款轻量级的、可以快…

怎样在 VS Code 中快速创建 Vue 单文件组件(SFC)的基础模板结构?

问题 在Vue项目的开发中&#xff0c;我们经常遇到一个问题&#xff0c;创建新组件时要自己输入基本的框架&#xff0c;比如&#xff1a; <template><div class"page-box"></div> </template><script> export default {name: ,data()…

高防IP在服务器中的作用都有哪些?

高防IP作为一种通过技术手段让用户网络服务更加安全的一种IP地址&#xff0c;有着更高的防御能力&#xff0c;有着强大的流量清洗中心和防御系统&#xff0c;帮助企业实时监控网络流量&#xff0c;将恶意的用户请求识别并过滤掉&#xff0c;保护目标服务器不会受到网络攻击&…

实战 X-AnyLabeling:构建高效自动标注系统的工程实践

文章目录 一、项目背景与目标二、系统架构与模块划分2.1 模块组成说明2.2 架构图 三、模型封装与平台对接3.1 模型封装接口3.2 接入 X-AnyLabeling 平台 四、可视化与预测验证4.1 UI 预测标签预览 五、性能优化与工程经验5.1 模型加速与推理优化5.2 经验总结5.3 实际效果 本文将…

UC3842/UC3843反激教程教学开关电源 反激设计步骤,每一关键元器件计算

资料下载地址&#xff1a;UC3842/UC3843反激教程教学开关电源 反激设计步骤&#xff0c;每一关键元器件计算 1、原理图 2、PCB图 3、变压器设计资料 4、开关电源设计资料 5、主要元器件说明书 6、系统整体资料 7、说明文档 7.1、电源设计概述 电源规格&#xff1a;设计一款 2…

Docker 入门教程(二):Docker 的基本原理

文章目录 &#x1f433; Docker 入门教程&#xff08;二&#xff09;&#xff1a;Docker 的基本原理1. Docker 架构总览&#xff1a;三大核心角色2. 镜像与容器的关系3. 容器启动流程&#xff1a;docker run 背后发生了什么&#xff1f; &#x1f433; Docker 入门教程&#xf…

21.安卓逆向2-frida hook技术-HookOkHttp的拦截器

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a;图灵Python学院 工具下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1bb8NhJc9eTuLzQr39lF55Q?pwdzy89 提取码&#xff1…

小程序入门:swpier 和 swpier-item 的基本使用

在前端开发中&#xff0c;创建交互式的用户界面组件是至关重要的。今天&#xff0c;我们将深入探讨 swpier 和 swpier-item 的基本使用方法&#xff0c;这两个组件在构建轮播图等滑动效果的场景中非常实用。 一、swpier 组件概述 swpier 组件是实现滑动效果的核心容器。它负责…

SQL学习笔记4

约束 1、约束 约束&#xff0c;是指作用在表中字段上的规则&#xff0c;用于限制字段输入的数据&#xff0c;使得表格式统一&#xff0c;数据内容正确。同一个字段的约束可以有多个 约束包括&#xff1a; 非空约束&#xff0c;限制表中的值不为null:not null 唯一约束&…

力扣刷题(第七十天)

灵感来源 - 保持更新&#xff0c;努力学习 - python脚本学习 比特位计数 解题思路 对于任意整数 x&#xff0c;其 1 的个数等于 x // 2 的 1 的个数加上 x % 2。状态转移方程&#xff1a;dp[x] dp[x // 2] (x % 2)。 class Solution:def countBits(self, n: int) ->…

鸿蒙网络编程系列56-仓颉版通过数据包结束标志解决TCP粘包问题

1. TCP粘包问题解决思路 在本系列的上一篇文章演示了TCP数据粘包的原因以及可能的解决方法&#xff0c;本文将通过其中的添加数据包结束标志的方法来解决这个问题。我们知道&#xff0c;数据粘包的原因是因为发送的时候没有标明数据包的边界&#xff0c;那么&#xff0c;我们人…