当前位置: 首页 > news >正文

SVM对偶问题

1、对偶问题数学基础

对偶问题:在线性规划中,每一个线性规划问题(称为原问题)都有一个与之对应的对偶问题。从数学形式上看,如果原问题是求解一个线性目标函数的最大值(或最小值),在满足一系列线性不等式(或等式)约束的条件下,那么对偶问题就是通过原问题的约束条件系数和目标函数系数等信息构建的另一个线性规划问题。这两个问题之间存在着紧密的数学关系。

PS2-1:为防止一些同学没有学过凸优化理论讲解一下什么是凸优化问题。

对于一般地约束优化问题

若目标函数f(x)是凸函数,约束集合是凸集(s.t.后面的两个为约束条件,假设有n个等式约束和m个不等式约束),则称上述优化问题为凸优化问题,特别地,g_i(x)是凸函数,h_i(x)是线性函数时,约束集合为凸集,该优化问题为凸优化问题。显然,支持向量机的目标函数是\frac{1}{2}\left \| w \right \|^2关于 w 的凸函数,不等式约束1-y_i(w^Tx_i+b)也是关于 w 的凸函数,因此支持向量机是一个凸优化问题。

emm补充一些内容,关于凸函数的:

        ①若是f(x)为凸函数,那么-f(x)则是凹函数。这说明了线性函数既是凸函数也是凹函数。

        ②对于二次函数,若是Q矩阵是半正定矩阵,那么其二阶导(海森矩阵)也为半正定矩阵,根据凸性判定的二阶条件,它也是凸的。

        ③最小二乘函数总是可以写成AA^T,因此也是凸的

凸集:集合C内的任意取两点,形成的线段均在集合C内,则称集合C为凸集。

扩展到k个点的时候:

凸集的示例:

在支持向量机求解最优分离超平面的问题中,使用拉格朗日对偶性将原始问题转换为对偶问题,通过解对偶问题得到原始问题的解。这里的拉格朗日对偶法对于一般地约束优化问题,并不一定要是凸优化问题。

设上述优化问题的定义域为上面三个函数的交集

可行集首先要满足定义域,同时还得让x满足约束条件,即

显然 𝐷 是 𝐷 的子集,最优值为P^*=min{f(\widetilde{x})},\widetilde{x} \in\widetilde{D}。由拉格朗日函数的定义可知上述优化问题的拉格朗日函数为:

其中μ={μ1;μ2;…;μm},λ={λ1;λ2;…;λn}为拉格朗日乘子向量。

定义上述优化问题的拉格朗日对偶函数𝛤(𝜇,𝜆) ,该对偶函数只是关于拉格朗日乘子的函数,其自变量与 x 无关。𝛤(𝜇,𝜆)为拉格朗日函数𝐿(𝑤,𝑏,𝛼)关于 𝑥 的下确界。即

PS2-2:这里扩充一下下确界和上确界的概念

下确界:infinfimuminfima)。inf(S), S  表示一个集合,inf(S)是指集合 S 的下确界,即小于或等于 S 中所有元素的最大值,这个数不一定在集合S中。

上确界:supsupermum)。sup(S) 是指集合 S 的上确界,即大于或等于 S 的所有元素的最小值,这个数不一定在集合 S 中。

举几个例子:

①𝑖𝑛𝑓{1,2,3,4,5}=1:集合 {1,2,3,4,5}  的下确界是 1,因为 1 是集合中最小的元素。

②𝑖𝑛𝑓{𝑥∈ℝ| 0< 𝑥<10}=0:集合 {𝑥∈ℝ|0<𝑥<10} 的下确界是 0,因为 0 是小于集合中所有元素的最大值,但 0 不在集合中。

inf\left \{ (-1)^n+\frac{1}{n+1}|n=1,2,3,... \right \}=0:数列  (-1)^n+\frac{1}{n+1} 的下确界是 0,因为 0 是小于或等于数列所有项的最大值。

④𝑠𝑢𝑝{1,2,3,4}=4:集合 {1,2,3,4} 的上确界是 4,因为 4 是集合中最大的元素。

⑤𝑠𝑢𝑝{𝑥∈ℝ| 0<𝑥<10}=10:集合 {𝑥∈ℝ| 0<𝑥<10} 的上确界是 10,因为 10 是大于集合中所有元素的最小值,但 10 不在集合中。

⑥𝑠𝑢𝑝{𝑥∈ℝ| 0<𝑥≤ 10}=10:集合 {𝑥∈ℝ| 0<𝑥<10} 的上确界也是 10,因为 10 是集合中最大的元素。

关于上确界和下确界的一些性质

sup\left \{ a+b|a\in A \quad and \quad b\in B \right \}=sup(A)+sup(B):两个集合 A 和 B 的和的上确界等于它们各自上确界的和。

inf\left \{ a+b|a\in A \quad and \quad b\in B \right \}=inf(A)+inf(B):两个集合 A 和 B 的和的下确界等于它们各自下确界的和。

对偶函数𝛤(𝜇,𝜆)有如下重要的性质:

①无论上述优化问题是否是凸优化问题,其对偶函数𝛤(𝜇,𝜆)恒为凹函数

②当𝜇⪰0时,𝛤(𝜇,𝜆)构成了上述优化问题最优值p^*的下界,即𝛤(𝜇,𝜆) ≤ p^* 

PS2-3:为什么𝛤(𝜇,𝜆)构成了上述优化问题最优值p^*的下界?

【证明】:设\widetilde{x} \in\widetilde{D}是优化问题的可行点,则满足等式约束条件,即g_i(\widetilde{x})\leq 0,h_i(\widetilde{x})=0,因此当 𝜇⪰0时,\mu _ig_i(\widetilde{x})\leq 0,\lambda _ih_i(\widetilde{x})=0恒成立,所以

进一步可以推出

又因为

这个式子,左边的 𝑥 ∈ 𝐷 ,\widetilde{x} \in\widetilde{D} , 而 \widetilde{D} 是 𝐷 的子集。那 x 求的就是最小值。在全局𝐷上的最小值一定小于等于子集\widetilde{D}上任何一个点所取到的值。(这句话可能有点抽象,举个例子珠穆朗玛峰是世界上最高的山峰,那其一定是在中国最高的山峰。)。所以根据上面的式子可知

进一步地

所以,𝛤(𝜇,𝜆)构成了上述优化问题最优值p^*的下界。证毕!

定义在满足这个μ ⪰ 0约束条件下求对偶函数最大值的优化问题为拉格朗日对偶问题(简称对偶问题)

设对偶问题的最优值为d^*,显然d^*\leq p^*,此时称为"弱对偶性"成立,若d^* =p^*,则称为"强对偶性"成立。如此一来就找到了求解p^*的方法。

说一下对偶问题的性质:

①当主问题满足某些充分条件时,强对偶性成立。常见的充分条件有Slater条件:"若主问题是凸优化问题,且可行集\widetilde{D} 中存在一点能使所有不等式约束的不等号成立,则强对偶性成立"。显然,支持向量机满足Slatert条件。

②无论主问题是否为凸优化问题,对偶问题恒为凸优化问题,因为对偶函数𝛤(𝜇,𝜆)恒为凹函数(加个负号即可转为凸函数),约束条件μ⪰0恒为凸集

③设f(x),g_i(x),h_j(x)一阶偏导连续,x^*(\mu ^*,\lambda ^*)分别为主问题和对偶问题的最优解,若是强对偶成立,则,x^*\mu ^*,\lambda ^*一定满足如下5个条件:

这五个条件也成为KKT条件。KKT条件是局部解的必要条件,也就是说只要该优化问题满足任何一个特定的约束限制条件,局部解就一定会满足以上5个条件。

PS2-4:这里的"∇𝑥"就是对变量x的梯度,其实就是对x求导,其中不等式的约束的乘子必须是大于等于0的,不等式的乘子×其不等式约束=0。

        公式①是"稳定性条件":在最优解x^* 处,目标函数的梯度必须与所有约束的梯度的线性组合相等。

        公式②和公式③是"原始可行性":最优解x^*必须满足所有约束条件:

        公式④是"对偶可行性":不等式约束的拉格朗日乘子必须非负

        公式⑤是"互补松弛条件":对于每个不等式约束,要么约束是活跃的,要么对应的拉格朗日乘子为零

KKT条件的定义:KKT条件是判断某点是否为约束优化问题极值点的必要条件。对于一个非线性规划问题,如果目标函数和约束条件满足一定的正则性条件,那么在最优解处,KKT条件必须成立。一个典型的优化问题可以表示为:

其中:

现在对于支持向量机的数学知识基本讲解完毕,套用上面的知识:

2、SVM问题实例

主问题:

拉格朗日函数,引入拉格朗日乘子a_i\geq 0得到拉格朗日函数

令𝐿(𝑤,𝑏,𝛼)对 w b 的偏导为 0(这里的 w b 就相当于上面 KKT 中说的 x )可得

将其带入拉格朗日函数里,得:

PS2-5:这里的计算过程是比较简单的,对w和b求偏导的过程不用多说。数学基础有所缺失的朋友可能会对 w^T 和\left \| w \right \|的求解有些许疑问。首先根据向量和矩阵的转置性质(c\cdot a)^T=c\cdot a^T,其中a是向量,c是标量。故:

而对于

解出 𝛼 以后,求出 w b 即可得到模型:

其对应的KKT条件

a_i=0,则该样本将不会在最终模型的求和中出现,也就不会对 𝑓(𝑥) 有任何影响;

a_i> 0,则必有y_if(x_i)=1,所对应的样本点位于最大间隔边界上。

这显示出支持向量机的一个重要性质,即解的稀疏性:训练完成后,大部分的训练样本都不需要保留,最终模型只与支持向量相关。

现在问题就集中到如何解出 𝛼 了,不难发现,这是一个二次规划问题,可以使用通用二次规划算法解决,然而对于训练样本数较大的情况下,使用通用二次规划算法的开销较大。根据问题特性,创造了很多高效的算法,这里以SMO算法作为代表进行介绍。

PS2-6:二次规划问题:是一种特殊类型的优化问题,其目标函数是二次的,而约束条件可以是线性的。二次规划问题的一般形式如下:

其中,Q 是一个对称的正定或半正定矩阵c 是一个列向量,AA_e 是线性约束的系数矩阵,𝑏 和 b_e 是线性约束的常数项向量,l和 𝑢 分别是变量的下界和上界向量。

        凸二次规划问题:Q半正定,问题有全局解

        严格凸二次规划问题:Q正定,问题有唯一全局解

        一般二次规划问题:Q不定,问题有稳定点或局部解

【一般而言直接代入对应的求解包就行】

详见:最优化 | 二次规划的基础知识理论https://blog.csdn.net/weixin_42301220/article/details/126267907?ops_request_misc=%257B%2522request%255Fid%2522%253A%25223360fe5648d543f2fb84281edc96aedf%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=3360fe5648d543f2fb84281edc96aedf&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-1-126267907-null-null.142%5ev101%5epc_search_result_base2&utm_term=%E4%BA%8C%E6%AC%A1%E8%A7%84%E5%88%92%E9%97%AE%E9%A2%98&spm=1018.2226.3001.4187

SMO(Sequential Minimal Optimization)节省计算开销,SMO每次选择两个样本 \alpha _i\alpha _j ,并固定其他参数,在参数初始化后,SMO不断执行如下两个步骤直至收敛:

1.选取一对需更新的变量 \alpha _i\alpha _j  。

2.固定 \alpha _i\alpha _j  以外的参数,求解对偶问题获得更新后的  \alpha _i\alpha _j 

仅考虑   \alpha _i\alpha _j 时,对偶问题的约束\sum_{i=0}^{m}\alpha _iy_i=0变为\alpha _iy_i+\alpha _jy_j=c,\alpha _i\geq 0,\alpha _j\geq 0,c= \sum_{k\neq i,j}^{}\alpha _ky_k(其实就是剩下的加起来)。

用 \alpha _i表示\alpha _j ,带入对偶问题

解出来 \alpha _i 以后我就能将解出来的值代入,就可以解出\alpha _j。如此一来就可以迭代的进行求解下去,而且这种方法可以很有效的提高效率。

直观来看,KKT条件违背的程度越大,则变量更新后可能导致目标函数数值减幅增大。SMO先选取违背KKT条件程度最大的变量,第二个变量应选择一个使目标函数值减小最快的变量(计算复杂度高),SMO采用了一个启发式:使选取的两个变量所对应的样本之间间隔最大,其一定是收敛的,因为一直找违反KKT条件最大的变量,迟早会找不到的。那就是收敛的地方。

PS2-7:这种处理方法可以很有效的减少计算量。

如何确定偏移项b就很简单了,因为对于任意支持向量(x_s,y_s)都有y_sf(x_s)=1,即

其实只要解出一个 \alpha _i其实就可以将 b 解出来了,但是为了提高鲁棒性,通常使用所有支持向量求解的平均值,即:

以上其实就是SVM的基本型。就是问题是线性可分,找到划分过程。在划分过程中找到优化技术,将目标写出来以后进行优化。经过拉格朗日乘子法之后,化解成为了闭式解的问题。再求解闭式解的过程中采用了SMO方法得到一个迭代的解法,使计算就变得更为友好。这就是标准型。

但是在显示问题中,经常遇到线性不可分的情况,那就在这个基础性的基础上加一些变化即可。

相关文章:

SVM对偶问题

1、对偶问题数学基础 对偶问题:在线性规划中,每一个线性规划问题(称为原问题)都有一个与之对应的对偶问题。从数学形式上看,如果原问题是求解一个线性目标函数的最大值(或最小值),在满足一系列线性不等式&…...

萃取的实现(三)

探测成员 基于SFINAE&#xff0c;判断一个给定类型T&#xff0c;是否含有名为x的成员。 探测类型成员 判断一个给定类型T&#xff0c;是否含有类型成员size_type&#xff0c;源码如下&#xff1a; #include <type_traits> #include <iostream> #include <vect…...

nodejs版本管理,使用 nvm 删除node版本,要删除 Node.js 的某个版本详细操作

要删除 Node.js 的某个版本并保持 Node Version Manager (nvm) 的管理整洁&#xff0c;可以按以下步骤操作&#xff1a; 步骤 1&#xff1a;查看已安装的 Node.js 版本 nvm ls这会列出你通过 nvm 安装的所有 Node.js 版本。输出类似于&#xff1a; -> v18.17.1v16.20…...

openCV中如何实现滤波

图像滤波用于去除噪声和图像平滑&#xff0c;OpenCV 提供了多种滤波器&#xff1a; 1.1. 均值滤波&#xff1a; import cv2# 读取图像 image cv2.imread("example.jpg")# 均值滤波 blurred_image cv2.blur(image, (5, 5)) # (5, 5) 是滤波核的大小 滤波核大小的…...

vscode通过ssh连接服务器实现免密登录+删除

文章目录 参考&#xff1a; 1、 vscode通过ssh连接服务器实现免密登录删除&#xff08;吐血总结&#xff09;...

智能硬件新时代,EasyRTC开启物联音视频新纪元

在万物互联的时代浪潮中&#xff0c;智能硬件正以前所未有的速度融入我们的生活&#xff0c;从智能家居的便捷控制&#xff0c;到智能穿戴设备的健康监测&#xff0c;再到工业物联网的高效管理&#xff0c;智能硬件的应用场景不断拓展。而在这个智能硬件蓬勃发展的背后&#xf…...

《机器学习数学基础》补充资料:求解线性方程组的克拉默法则

《机器学习数学基础》中并没有将解线性方程组作为重点&#xff0c;只是在第2章2.4.2节做了比较完整的概述。这是因为&#xff0c;如果用程序求解线性方程组&#xff0c;相对于高等数学教材中强调的手工求解&#xff0c;要简单得多了。 本文是关于线性方程组的拓展&#xff0c;供…...

mysql的rpm包安装

(如果之前下载过mariadb&#xff0c;使用yum remove mariadb卸载&#xff0c;因为mariadb与rpm包安装的mysql有很多相似的组件和文件&#xff0c;会发生冲突&#xff0c;而源码包安装的mysql不会&#xff0c;所以不用删除源码包安装myqsl&#xff0c;只删除mariadb就可以&#…...

TailwindCss的vue3安装使用

按照官网的安装教程&#xff0c;属性最后无法生效&#xff0c;这是自我改良版&#xff0c;添加了额外步骤&#xff0c;但是每次引入新的tailwindcss属性 需要重新跑一次项目 npm下载tailwindcss npm install -D tailwindcss npx初始化tailwind配置 npx tailwindcss init 此时根…...

foobar2000设置DSP使用教程及软件推荐

foobar2000安卓中文版&#xff1a;一款高品质手机音频播放器 foobar2000安卓中文版是一款备受好评的高品质手机音频播放器。 几乎支持所有的音频格式&#xff0c;包括 MP3、MP4、AAC、CD 音频等。不论是经典老歌还是最新的流行音乐&#xff0c;foobar2000都能完美播放。除此之…...

开源多商户商城源码最新版_适配微信小程序+H5+APP+PC多端

在数字化时代&#xff0c;电子商务已经成为各行业不可或缺的一部分&#xff0c;开源多商户商城源码为中小企业和个人开发者提供了快速搭建和定制电商平台的利器。分享一款最新版的开源多商户商城源码&#xff0c;它能够适配微信小程序、H5、APP和PC等多个端口&#xff0c;满足商…...

【matlab】大小键盘对应的Kbname

matlab中可以通过Kbname来识别键盘上的键。在写范式的时候&#xff0c;遇到一个问题&#xff0c;我想用大键盘上排成一行的数字按键评分&#xff0c;比如 Kbname(1) 表示键盘上的数字1&#xff0c;但是这种写法只能识别小键盘上的数字&#xff0c;无法达到我的目的&#xff0c;…...

go语言并发的最佳实践

Go 语言的并发模型是其最强大的特性之一&#xff0c;基于 CSP&#xff08;Communicating Sequential Processes&#xff09;理论&#xff0c;通过 goroutine 和 channel 实现轻量级并发. 一、并发核心概念 1. Goroutine 在 Go 语言中&#xff0c;Goroutine 是实现并发编程的…...

超全Deepseek资料包,deepseek下载安装部署提示词及本地部署指南介绍

该资料包涵盖了DeepSeek模型的下载、安装、部署以及本地运行的详细指南&#xff0c;适合希望在本地环境中高效运行DeepSeek模型的用户。资料包不仅包括基础的安装步骤&#xff0c;还提供了68G多套独立部署视频教程教程&#xff0c;针对不同硬件配置的模型选择建议&#xff0c;以…...

重看Spring聚焦BeanDefinition分析和构造

目录 一、对BeanDefinition的理解 &#xff08;一&#xff09;理解元信息 &#xff08;二&#xff09;BeanDefinition理解分析 二、BeanDefinition的结构设计分析 &#xff08;一&#xff09;整体结构体会 &#xff08;二&#xff09;重要接口和类分析 三、构造 BeanDef…...

从MySQL5.7平滑升级到MySQL8.0的最佳实践分享

一、前言 升级需求&#xff1a;将5.7.35升级到8.0.27, 升级方式 in-place升级【关闭现有版本MySQL&#xff0c;将二进制或包替换成新版本并在现有数据目录上启动MySQL并执行升级任务的方式&#xff0c;称为in-place升级】 原版本 5.7.35 CentOS Linux release 7.9.2009 新版本…...

Node-Red

是什么? ——基于浏览器的流程编辑工具可连接设备、服务器和API应用 一、安装 1、本地安装(Windows) 在电脑上安装 Node.js 环境,然后使用 NPM 安装 Node-RED Node.js介绍: JavaScript 在不同的位置有不一样的解析器 写入 HTML 的 JS 语言,浏览器即它的解析器需要独…...

GO语言的安装以及第一个Go语言程序

1. Go语言的安装与设置 官网:golang.org 国内下载:https://studygolang.com/dl 国内镜像:https://goproxy.cn/ 2. GOland的安装 Go 1.13 及以上&#xff08;推荐&#xff09; 打开你的终端并执行 $ go env -w GO111MODULEon $ go env -w GOPROXYhttps://goproxy.cn,direc…...

年前集训总结python

1.用空格隔开输出列表list1 print(" ".jion(map(str,list1))) 2.转换函数 int() 将一个数字或字符串转换为整数。可以指定基数&#xff0c;支持从其他进制&#xff08;如二进制、十六进制&#xff09;转换为十进制。 int(101, 2) # 二进制字符串转十进制 > 5 …...

【JAVA实战】JAVA实现Excel模板下载并填充模板下拉选项数据

背景 有这样一个场景&#xff1a;前端下载Excel模板&#xff0c;进行数据导入&#xff0c;这个下载模板过程需要经过后端接口去数据库查询数据进行某些列的下拉数据填充&#xff0c;下拉填充的数据过程中会出现错误String literals in formulas can’t be bigger than 255 cha…...

【linux】在 Linux 上部署 DeepSeek-r1:32/70b:解决下载中断问题

【linux】在 Linux 上部署 DeepSeek-r1:32/70b:解决下载中断问题 【承接商业广告,如需商业合作请+v17740568442】 文章目录 【linux】在 Linux 上部署 DeepSeek-r1:32/70b:解决下载中断问题问题描述:解决方法方法一:手动中断并重启下载方法二:使用 Bash 脚本自动化下载在…...

Rust 面试题

1. Rust 中的所有权(Ownership)是什么? 回答: 所有权是 Rust 的核心概念之一,每个值在 Rust 中都有一个唯一的所有者,并且所有权在作用域内转移。当所有者离开作用域时,Rust 会自动释放该值的内存,避免了内存泄漏。 代码示例: fn main() {let s1 = String::from(&q…...

Copilot Next Edit Suggestions(预览版)

作者&#xff1a;Brigit Murtaugh&#xff0c;Burke Holland 排版&#xff1a;Alan Wang 我们很高兴向你介绍在本次 Visual Studio Code 发布中&#xff0c;关于 GitHub Copilot 的三个预览功能&#xff1a; Next Edit Suggestions&#xff08;NES&#xff09;Copilot Edits 的…...

LeetCode - 18 四数之和

题目来源 18. 四数之和 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] &#xff08;若两个四元组元素一一…...

汽车零部件开发应该具备哪些编程思维?

目录 1、功能安全思维 2、实时性与确定性思维 3、可靠性和冗余思维 4、硬件软件协同思维 5、CAN总线通信思维 6、故障诊断和自诊断思维 7、功耗优化思维 8、软件更新和版本管理思维 9、用户体验与安全性思维 汽车零部件开发中&#xff0c;嵌入式软件在车辆系统中的作用…...

在Windows系统中安装Open WebUI并连接Ollama

Open WebUI是一个开源的大语言模型&#xff08;LLM&#xff09;交互界面&#xff0c;支持本地部署与离线运行。通过它&#xff0c;用户可以在类似ChatGPT的网页界面中&#xff0c;直接操作本地运行的Ollama等大语言模型工具。 安装前的核心要求&#xff1a; Python 3.11&#…...

React 与 Vue 对比指南 - 上

React 与 Vue 对比指南 - 上 本文将展示如何在 React 和 Vue 中实现常见功能&#xff0c;从基础渲染到高级状态管理 Hello 分别使用 react 和 vue 写一个 Hello World&#xff01; react export default () > {return <div>Hello World!</div>; }vue <…...

自动化办公|通过xlwings进行excel格式设置

1. 介绍 xlwings 是一个强大的 Python 库&#xff0c;可以用来操作 Excel&#xff0c;包括设置单元格格式、调整行高列宽、应用条件格式以及使用内置样式。本文将详细介绍如何使用 xlwings 进行 Excel 格式化操作&#xff0c;并附带代码示例。 2. 基础格式设置&#xff08;字…...

c# -01新属性-模式匹配、弃元、析构元组和其他类型

文章目录 **学习摘抄分享**模式匹配概述Null 检查类型测试比较离散值关系模型多个输入ObServation列表模式弃元元组和对象析构利用switch的模式进行匹配对于out的方法调用独立弃元析构元组和其他类型元组方法一方法二方法三方法四使用弃元元组的元素使用弃元的用户定义类型解构…...

银河麒麟V10SP1下qt5-12-12编译环境配置

下面的脚本在兆芯版kylin上试过,如果是本地编译,arm版应该也没有问题 a. 如果执行脚本安装有问题&#xff0c;读者可以拷贝命令多次安装 b. 建议在虚拟机环境下进行 #!/bin/bashsudo apt updatesudo apt-get install g gcc make cmake gperf bison flex libdrm-dev libxcompos…...

轻松搭建本地大语言模型(一)Ollama安装与使用

Ollama 是一款开源的本地大语言模型运行框架&#xff0c;支持在 Windows、macOS 和 Linux 系统上运行&#xff0c;能够帮助用户轻松下载和使用各种大语言模型&#xff08;例如deepseek、llama、qwen&#xff09;。本文将详细介绍 Ollama 的安装步骤&#xff0c;帮助你快速搭建本…...

【深度学习】Transformer入门:通俗易懂的介绍

【深度学习】Transformer入门&#xff1a;通俗易懂的介绍 一、引言二、从前的“读句子”方式三、Transformer的“超级阅读能力”四、Transformer是怎么做到的&#xff1f;五、Transformer的“多视角”能力六、Transformer的“位置记忆”七、Transformer的“翻译流程”八、Trans…...

浅识Linux高阶用法

&#xff08;前记&#xff1a;内容有点多&#xff0c;先看目录再挑着看。&#xff09; 问题&#xff1a;在Java面试中&#xff0c;当被提问到Linux的高阶用法以及如何使用Linux将程序、数据库、中间件等部署在云上时&#xff0c;可以从以下几个方面进行回答&#xff1a; Li…...

I²C简介

前言 IC&#xff08;Inter-Integrated Circuit, 内置集成电路&#xff09;总线是由Philips公司&#xff08;现属于恩智浦&#xff09;在上世纪80年代开发的两线式串行通信总线&#xff0c;用于连接微控制器及其外围设备&#xff0c;控制设备之间的通信。 IC总线的物理拓扑示意…...

Linux定时静默执行桌面/前台程序

Linux服务器上的程序大都在后台默默的执行&#xff0c;但有些需要在前台或桌面上运行的程序该怎么办呢&#xff1f;这就要借助虚拟显示技术&#xff0c;也就是在后台运行时提供虚拟的显示&#xff0c;使前台运行的程序也能默默的在后台运行&#xff0c;这就是所谓的以“无头模式…...

Redux中间件redux-thunk和redux-saga的具体区别是什么?

Redux 中间件是增强 Redux 功能的重要工具&#xff0c;redux-thunk 和 redux-saga 是两个常用的中间件&#xff0c;它们在处理异步操作和副作用时提供了不同的方式和理念。以下是两者的具体区别&#xff1a; 1. 概念与设计理念 redux-thunk 简洁&#xff1a;redux-thunk 是一…...

【STM32】DRV8833驱动电机

1.电机如何转动 只需要给电机两个端子加一正一负的极性就会转起来了&#xff0c;但是要注意的是不要将电机两端直接接在5v和gnd之间&#xff0c;这种电机一般要提供几百毫安的电流&#xff0c;而GPIO口只能提供几毫安&#xff0c;所以我们使用一个DRV8833来驱动 DRV8833输入口…...

【go语言规范】 使用函数式选项 Functional Options 模式处理可选配置

如何处理可选配置&#xff1f; Config Struct 方式 (config-struct/main.go) 这是最简单的方式&#xff0c;使用一个配置结构体&#xff1a; 定义了一个简单的 Config 结构体&#xff0c;包含 Port 字段创建服务器时直接传入配置对象优点&#xff1a;简单直接缺点&#xff1a…...

vue中为组建添加样式的方式

在 Vue 中&#xff0c;可以通过多种方式为 view 添加样式&#xff0c;并且支持动态绑定样式。以下是几种常见的方式&#xff1a; 1. 内联样式 直接在模板中使用 style 属性来添加样式。 <template><div style"color: red; font-size: 14px;">这是一个…...

如何简单的去使用jconsloe 查看线程 (多线程编程篇1)

目录 前言 1.进程和线程 进程 PCB 的作用 并发编程和并行编程 线程 为什么选择多线程编程 2.在IDEA中如何简单创建一个线程 1. 通过继承Thread类 2. 通过实现 Runnable 接口 3. 使用 Lambda 表达式 3.如何简单使用jconsloe去查看创建好的线程 前言 2025来了,这是第…...

机器学习·最近邻方法(k-NN)

前言 上一篇简单介绍了决策树&#xff0c;而本篇讲解与决策树相近的 最近邻方法k-NN。 机器学习决策树-CSDN博客 一、算法原理对比 特性决策树最近邻方法&#xff08;k-NN&#xff09;核心思想通过特征分割构建树结构&#xff0c;递归划分数据基于距离度量&#xff0c;用最近…...

网络安全试题

ciw网络安全试题 &#xff08;1&#xff09;&#xff08;单选题&#xff09;使网络服务器中充斥着大量要求回复的信息&#xff0c;消耗带宽&#xff0c;导致网络或系统停止正常服务&#xff0c;这属于什么攻击类型? A、拒绝服务 B、文件共享 C、BIND漏洞 D、远程过程调用 &a…...

沃丰科技大模型标杆案例 | 索尼大模型智能营销机器人建设实践

AI大模型发展日新月异&#xff0c;国内外主流大模型每月必会升级。海外AI大模型市场由美国主导&#xff0c; 各模型已形成“多强竞合”的局面。中国积极响应全球大模型技术的发展趋势&#xff0c;高校、研究院所等科研机构、互联网企业&#xff0c;人工智能企业均不同程度地投入…...

​ ​rust学习四、控制语句

rust的控制语句和大部分语言没有什么区别&#xff0c;都是熟悉的for,while,loop,if。 比较不同的是&#xff0c;在绝大部分非常流行的语言中都有的switch&#xff0c;rust是没有的。 诸如c/c,java,javascript,c#。连PL/SQL都有case when语句。 一、基本的for、while、if&…...

会员购交易系统架构演进

本期作者 1.背景 会员购是B站2017年推出的IP消费体验服务平台&#xff0c;在售商品以手办、漫画、JK制服等贴合平台生态的商品为主。随着业务发展&#xff0c;会员购从最开始的预售&#xff0c;现货拓展到全款预售&#xff0c;盲盒&#xff0c;众筹等多种售卖方式&#xff0c;销…...

在Linux系统下修改Docker的默认存储路径

在Linux系统下修改Docker的默认存储路径可以通过多种方法实现&#xff0c;下边是通过修改daemon.json文件方式实现 查看当前Docker存储路径 使用命令 docker info | grep "Docker Root Dir" 查看当前Docker的存储路径&#xff0c;默认为 /var/lib/docker 停止Docker…...

【人工智能】释放数据潜能:使用Featuretools进行自动化特征工程

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 特征工程是机器学习流程中至关重要的一步,它直接影响模型的性能。然而,手动特征工程既耗时又需要领域专业知识。Featuretools是一个强大的…...

shell脚本备份PostgreSQL数据库和库下表

注意&#xff1a; 以下为对PostgreSQL13.16版本数据库备份shell脚本参考请确认备份节点上psql和pgdump的版本不至于太低&#xff0c;建议>13.16该脚本目前是对于整库、&#xff08;默认针对public这个schema&#xff0c;如果有其他schema&#xff0c;请自行添加一层循环&am…...

java面试笔记(一)

1. 一万个string类型的数据&#xff0c;设计一个算法如何按照String长度来排序 以使用 Arrays.sort() 方法&#xff0c;并结合一个自定义的比较器。以下是实现的示例代码: public class StringLengthSort {public static void main(String[] args) {// 定义一万个字符串的示例…...

网络分析仪E5071C的回波损耗测量

回波损耗&#xff08;Return Loss&#xff09;是评估射频/微波元件&#xff08;如滤波器、天线、电缆等&#xff09;信号反射特性的关键参数&#xff0c;反映端口阻抗匹配性能。E5071C矢量网络分析仪&#xff08;VNA&#xff09;通过以下步骤实现高精度回波损耗测量&#xff1a…...