支持向量机详解(SVM)

鸣谢

本文引用了下列文章或书籍
1.《机器学习》俗称西瓜书,作者:周志华
2.用讲故事的办法帮你理解SMO算法
3.吴恩达CS299课堂资料


说到支持向量机,首先得介绍一些基础知识,现在开始。


凸集

凸集定义:集合C内任意两点连成的**线段(注意和仿射集的区别)**都在集合C内,则C为凸集。
举个例子:
这里写图片描述

显然上图中,左图是凸集,右边那个像肾一样的肯定不是凸集~

凸包

凸包定义:包含集合C的最小凸集,为集合C的凸包。
这里写图片描述
仿射集

定义:通过集合内中任意两不同点的直线,该直线仍在集合内,则该集合为仿射集
感性认识:即这个集合是“平的”是“直的”,换句话说即它是“线性的”
仿射集的例子:直线,平面,超平面
显然仿射集都是凸集,凸集不一定是仿射集。

拉格朗日乘数法

假设有优化问题:
min f(x)
s.t. Fi(x)<=0 i=1,2,…,n
上述优化问题的意思是,我要求f(x)的最小值,并且有如下约数条件

  1. F1(x)<=0
  2. F2(x)<=0

    n. Fn(x)<=0
    我们要求解上述优化问题,可以使用拉格朗日乘数法,即构造一个函数L,其中:
    L = f(x) + ∑ i = 1 n λ i F i ( x ) \sum_{i=1}^n\lambda_iF_i(x) i=1nλiFi(x)
    然后将L对λ,x求导,使导数都为0,联立方程组可以求出原解析问题的解。
    超平面

什么是超平面?听上去好像很牛逼的样子?其实是一个很简单的概念,简单点说就是:二维空间的超平面为一维直线,三维空间的超平面为二维平面…以此类推,n维空间的n-1维仿射集为n为空间的超平面。
举个例子:
这里写图片描述


上图就是一个二维空间的超平面,什么?这TM不是一根直线么?
这里写图片描述


可不就是在骗你…啊呸!可不就是一条直线么?这就是伟大的数学家的定义啊!


三维空间中的超平面就是一个空间里的平面,就像这样:
这里写图片描述


是不是有点感觉了?没错:二维空间的超平面为一维直线,三维空间的超平面为二维平面…以此类推,n维空间的n-1维仿射集为n为空间的超平面。


下面给出超平面的数学公式:
w T x + b = 0 w^Tx+b=0 wTx+b=0

其中W(W1,W2,W3,W4,…,Wn)为法向量,决定了超平面的方向。
b为位移项,决定了超平面在方向上的“位置”。
是不是有一点抽象,不用怕,我们继续用二维空间来举例子。
这里写图片描述
图中的两条直线分别为:
X1+X2+1=0和X1+X2+2=0
对照上面的公式,发现:
W1=W2=(1,1)
b1=1
b2=2
按照定义,W为法向量,我们来画一画试试:
这里写图片描述


哎哟卧槽?还真是法向量!怎么样?老夫没有忽悠你吧?


接下来看b,很容易发现这两条直线是平行的,唯一不同的就是这两条直线在它们的法向量的方向的“位置”不同,没错,这个b就是直线在它的法向量上的“位置”。


先导知识介绍完毕了,现在开始正戏。


支持向量机(SVM)基本模型

老规矩,没有图我说个J8,先来看一张图:
这里写图片描述
先忽略掉图中平行的两根细直线,暂时不管它。
很明显图中有+和-两种类别的样本,我们现在要想一个办法,找一个超平面,来把它分成两个类别,图中划了好多个超平面,都能达到我们的目的。
但是,有这么多超平面,只有一个才是我们要选择的,其实大家心里都有一杆秤,只要你不是太奇葩,总会觉得那根“最粗最大”的超平面才是我们想要的。
但是为啥我们要选择那个超平面呢?难道是因为它“最粗最大”?放肆! 老夫是那么肤浅的人吗?
没错,那个“最粗最大”的超平面看起来最顺眼,为啥最顺眼,因为它正好在两个类别的“中间”啊!它划分的最平均啊,选择他的话能够尽量减少划分错误的可能性,因为它不会偏向两边任何一个类,用它来分类最“公正”。换而言之,用它来划分结果是最鲁棒的。


好!就决定是你了!“粗大君”!我们设这个“粗大”的超平面为:
w T x + b = 0 w^Tx+b=0 wTx+b=0
它可以将空间分成两类:
1. w T x + b &gt; 0 w^Tx+b&gt;0 wTx+b>0
2. w T x + b &lt; 0 w^Tx+b&lt;0 wTx+b<0
是不是被老夫精妙的操作给震慑住了?
这里写图片描述
我来解释一下,如图所示(该图只是举个例子,具体数值没有意义),超平面将二维空间分成了红色和蓝色两类:
这里写图片描述


好了,这下总算有个如何分类的方针了,可是最重要的事情还没讲呢!那就是这个划分类型的超平面该如何确定呢?回到这张图:
这里写图片描述


生成两个样本集合的凸包,然后在凸包的支持向量上做切线,找到其中两个切线平行方向相反距离最大的那对切线,就是图中这两条虚线。然后找到这两个虚线“中间”的那个超平面(也就是这两条直线的垂线的垂直平分线)就是图中的实线。


那么问题来了,如何保证存在平行切线?
答:使数据集线性可分。
如何使数据线性可分呢?答案就是核函数。
核函数在后面提。


现在我们已经找到了,两条虚线(凸包的切线):
{ w T x i + b &gt; = + 1 , y i = + 1 w T x i + b &lt; = − 1 , y i = − 1 \begin{cases} w^Tx_i+b&gt;=+1,y_i=+1\\ w^Tx_i+b&lt;=-1,y_i=-1\\ \end{cases} {wTxi+b>=+1,yi=+1wTxi+b<=1,yi=1
归纳一下就是:
y i ( w T x i + b ) &gt; = + 1 y_i(w^Tx_i+b)&gt;=+1 yi(wTxi+b)>=+1
这个公式的意思就是:
当第i个样本的特征xi带入公式大于等于1的时候分为正类,也就是图中的“+”类
当第i个样本的特征xi带入公式小于等于-1的时候分为负类,也就是图中的“-”类


那么为什么一定是1呢?这个1和-1是缩放得到的,其实原式应该写为:
w T x i + b &gt; = + δ , δ ∈ R w^Tx_i+b&gt;=+δ,δ ∈ R wTxi+b>=+δδR
w T x i + b &lt; = − δ , δ ∈ R w^Tx_i+b&lt;=-δ,δ ∈ R wTxi+b<=δδR
由于 w T x + b = 0 w^Tx+b=0 wTx+b=0是平分线,所以两边的距离是相等的,所以等式右边可以保证绝对值相等。又因为等式左边的系数w和b代表着任意实数(只不过是一个代号而已),所以可以任意缩放。


如图所示,距离超平面最近的几个点正好在虚线对应的超平面上,也就是样本中可以让这两个不等式取“等号”的点。
于是数学家们给这几个点取了一个牛逼的名字,即“支持向量”,而这两条虚线的距离为
γ = 2 ∣ ∣ w ∣ ∣ \gamma=\frac{2}{||w||} γ=w2
我知道肯定有的同学不知道这个分数下面的||w||是啥意思,不要着急,容老夫慢慢道来。
想必各位高中都学过平行直线距离公式吧,什么?忘了?没关系,让老夫来帮你回忆回忆。
设两条直线公式分别为:
Ax1+Bx2+C1=0
Ax1+Bx2+C2=0
那么这两条直线的距离公式为:
∣ C 1 − C 2 ∣ A 2 + B 2 \frac{|C1-C2|}{\sqrt[]{A^2+B^2}} A2+B2 C1C2
带入上面这个公式: γ = 2 ∣ ∣ w ∣ ∣ \gamma=\frac{2}{||w||} γ=w2
是不是发现了|C1-C2|=2,而下面的||w||= A 2 + B 2 \sqrt[]{A^2+B^2} A2+B2
好了,现在来解释这个||w||就轻松多了,假设w为一个向量(w1,w2,…,wn)那么||w||= w 1 2 + w 2 2 + . . . + w n 2 \sqrt[]{w_1^2+w_2^2+...+w_n^2} w12+w22+...+wn2 ,称为w的范数。


言归正传,这两个虚线的距离被称作“间隔”,很直观的理解就是把两个划分开的“间隔”,显然要分类效果尽可能的好的话,这个“间隔”就要尽可能的大!而要让这个“间隔”尽可能的大,就要让这个γ尽可能的大,换而言之就是要让处于分母位置的||w||尽可能的小,也就是让||w||²尽可能的小。于是我们得到了支持向量机的基本模型:
min 1 2 ∣ ∣ w ∣ ∣ 2 \frac{1}{2}||w||^2 21w2
s.t. y i ( w T x i + b ) &gt; = 1 y_i(w^Tx_i+b)&gt;=1 yi(wTxi+b)>=1 ,i=1,2,…,m


求解支持向量机基本模型

看到这个优化问题的样子,我们是不是第一反应就是拉格朗日乘数法!!
没有错!对支持向量机基本模型使用拉格朗日乘数法,得到如下式子:

L ( w , b , α ) = 1 2 ∣ ∣ w ∣ ∣ 2 + ∑ i = 1 m α i ( 1 − y i ( w T x i + b ) ) L(w,b,\alpha)=\frac{1}{2}||w||^2+\sum_{i=1}^m\alpha_i(1-y_i(w^Tx_i+b)) L(w,b,α)=21w2+i=1mαi(1yi(wTxi+b))

然后我们用L对w,b分别求偏导,得到:
w = ∑ i = 1 m α i y i x i w=\sum_{i=1}^m\alpha_iy_ix_i w=i=1mαiyixi
0 = ∑ i = 1 m α i y i 0=\sum_{i=1}^m\alpha_iy_i 0=i=1mαiyi

将上述结果再回代入L中,得到对偶问题:
m a x α ∑ i = 1 m α i − 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y i y j x i T x j max_\alpha\quad\sum_{i=1}^m\alpha_i - \frac{1}{2}\sum_{i=1}^m\sum_{j=1}^m\alpha_i\alpha_jy_iy_jx_i^Tx_j maxαi=1mαi21i=1mj=1mαiαjyiyjxiTxj

此时的约束条件变成了:
s.t. ∑ i = 1 m α i y i = 0 \quad\sum_{i=1}^m\alpha_iy_i=0 i=1mαiyi=0
   α i &gt; = 0 , i = 1 , 2 , . . . , m \ \ \quad\quad\alpha_i&gt;=0,\quad i=1,2,...,m   αi>=0,i=1,2,...,m

解出来α之后,再求出w和b就可以得到最后的结果啦:
f ( x ) = ∑ i = 1 m α i y i x i T x + b f(x)=\sum_{i=1}^m\alpha_iy_ix_i^Tx+b f(x)=i=1mαiyixiTx+b

很显然,如果当x维度很高的话,这个方程会十分难解,为了避免这个问题,数学家们又想了一个歪…哦不,高招。
我们的高招,SMO算法华丽登场!
在介绍SMO之前,我们需要介绍KKT条件。

KKT条件

首先我们有:
一般优化问题的拉格朗日乘数法:
minimize f 0 ( x ) , x ∈ R f_0(x),\quad x\in R f0(x),xR
subject to
f i ( x ) &lt; = 0 , i = 1 , 2 , . . . . , m f_i(x)&lt;=0,\quad i=1,2,....,m fi(x)<=0,i=1,2,....,m
h j ( x ) = 0 ,    j = 1 , 2 , . . . . , p h_j(x)=0,\quad \ \ j=1,2,....,p hj(x)=0,  j=1,2,....,p

求出的拉格朗日函数为:
L ( x , λ , v ) = f 0 ( x ) + ∑ i = 1 m λ i f i ( x ) + ∑ j = 1 p v j h j ( x ) L(x,\lambda,v)=f_0(x)+\sum_{i=1}^m\lambda_if_i(x)+\sum_{j=1}^pv_jh_j(x) L(x,λ,v)=f0(x)+i=1mλifi(x)+j=1pvjhj(x)

该拉格朗日函数的对偶函数为:
g ( λ , v ) = inf ⁡ L ( x , λ , v ) = inf ⁡ ( f 0 ( x ) + ∑ i = 1 m λ i f i ( x ) + ∑ i = 1 p v i h i ( x ) ) g(\lambda,v)=\inf L(x,\lambda,v)=\inf(f_0(x)+\sum_{i=1}^m\lambda_if_i(x)+\sum_{i=1}^pv_ih_i(x)) g(λ,v)=infL(x,λ,v)=inf(f0(x)+i=1mλifi(x)+i=1pvihi(x))

若我们要通过求对偶问题的解来求原问题的解,即需要对偶函数的最大值就是原问题的最小值。即:
g ( λ ∗ , v ∗ ) \quad \quad g(\lambda^*,v^*) g(λ,v)
= inf ⁡ ( f 0 ( x ) + ∑ i = 1 m λ i ∗ f i ( x ) + ∑ i = 1 p v i ∗ h i ( x ) ) \quad =\quad \inf(f_0(x)+\sum_{i=1}^m\lambda_i^*f_i(x)+\sum_{i=1}^pv_i^*h_i(x)) =inf(f0(x)+i=1mλifi(x)+i=1pvihi(x))
&lt; =   f 0 ( x ∗ ) + ∑ i = 1 m λ i ∗ f i ( x ∗ ) + ∑ i = 1 p v i ∗ h i ( x ∗ ) ) \quad &lt;= \ f_0(x^*)+\sum_{i=1}^m\lambda_i^*f_i(x^*)+\sum_{i=1}^pv_i^*h_i(x^*)) <= f0(x)+i=1mλifi(x)+i=1pvihi(x))
&lt; =   f 0 ( x ) \quad &lt;= \ f_0(x) <= f0(x)

也就是要让上面两个不等式取等号。
要让第一个不等式取等号,即使x*为函数的驻点,即函数对x求导数为0
要让第一个不等式取等号,由于hi(x)=0,所以得要求λf(x)=0,所以得到如下约束:
{ f i ( x ∗ ) &lt; = 0 , i = 1 , 2 , . . . , m h i ( x ∗ ) =     0 , i = 1 , 2 , . . . , p λ i ∗    &gt; =   0 , i = 1 , 2 , . . . , m λ i ∗ f i ( x ∗ ) = 0 , i = 1 , 2 , . . . , m ∇ f 0 ( x ∗ ) + ∑ i = 1 m λ i ∗ ∇ f i ( x ∗ ) + ∑ i = 1 p v i ∗ ∇ h i ( x ∗ ) ) = 0 \begin{cases} f_i(x^*)&lt;=0,\quad i=1,2,...,m\\ h_i(x^*)=\ \ \ 0,\quad i=1,2,...,p\\ \lambda_i^*\ \ &gt;=\quad \ 0,\quad i=1,2,...,m\\ \lambda_i^*f_i(x^*)=0,\quad i=1,2,...,m\\ \nabla f_0(x^*)+\sum_{i=1}^m\lambda_i^*\nabla f_i(x^*)+\sum_{i=1}^pv_i^*\nabla h_i(x^*))=0\\ \end{cases} fi(x)<=0,i=1,2,...,mhi(x)=   0,i=1,2,...,pλi  >= 0,i=1,2,...,mλifi(x)=0,i=1,2,...,mf0(x)+i=1mλifi(x)+i=1pvihi(x))=0


SMO算法

拉格朗日对偶问题我们都会解,但是一旦数据集很大的话,求解过程就会十分复杂

max

∑ i = 1 m α i − 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y i y j x i T x j \sum_{i=1}^m\alpha_i - \frac{1}{2}\sum_{i=1}^m\sum_{j=1}^m\alpha_i\alpha_jy_iy_jx_i^Tx_j i=1mαi21i=1mj=1mαiαjyiyjxiTxj

s.t.

∑ i = 1 m α i y i = 0 \sum_{i=1}^m\alpha_iy_i=0 i=1mαiyi=0
α i &gt; = 0 , i = 1 , 2 , . . . , m \alpha_i&gt;=0,\quad i=1,2,...,m αi>=0,i=1,2,...,m

需要有一个优化的算法来求解这个复杂的问题,即SMO算法


因为直接求解超平面十分困难,我们从另外一个角度来思考问题,首先:
我们设最优超平面为g(x)。那么按照SVM的理论,如果这个g(x)是最优的分离超平面,就有:
{ f i ( x ∗ ) &lt; = 0 , i = 1 , 2 , . . . , m h i ( x ∗ ) =     0 , i = 1 , 2 , . . . , p λ i ∗    &gt; =   0 , i = 1 , 2 , . . . , m λ i ∗ f i ( x ∗ ) = 0 , i = 1 , 2 , . . . , m ∇ f 0 ( x ∗ ) + ∑ i = 1 m λ i ∗ ∇ f i ( x ∗ ) + ∑ i = 1 p v i ∗ ∇ h i ( x ∗ ) ) = 0 \begin{cases} f_i(x^*)&lt;=0,\quad i=1,2,...,m\\ h_i(x^*)=\ \ \ 0,\quad i=1,2,...,p\\ \lambda_i^*\ \ &gt;=\quad \ 0,\quad i=1,2,...,m\\ \lambda_i^*f_i(x^*)=0,\quad i=1,2,...,m\\ \nabla f_0(x^*)+\sum_{i=1}^m\lambda_i^*\nabla f_i(x^*)+\sum_{i=1}^pv_i^*\nabla h_i(x^*))=0\\ \end{cases} fi(x)<=0,i=1,2,...,mhi(x)=   0,i=1,2,...,pλi  >= 0,i=1,2,...,mλifi(x)=0,i=1,2,...,mf0(x)+i=1mλifi(x)+i=1pvihi(x))=0

姑且称这个叫g(x)目标条件吧。根据已有的理论,上面的推导过程是可逆的。也就是说,只要我能找到一个α,它能满足g(x)目标条件,那么这个α就是对偶问题的最优解。


SMO算法思路
首先,初始化一个α,让它满足对偶问题的两个初始限制条件,然后不断优化它,使得由它确定的分离超平面满足g(x)目标条件,在优化的过程中始终确保它满足初始限制条件,这样就可以找到最优解。

那么如何优化α呢?
遵循如下两个基本原则:
1.每次优化时,必须同时优化α的两个分量,因为只优化一个分量的话,新的α就不再满足初始限制条件中的等式条件了。
2.每次优化的两个分量应当是违反g(x)目标条件比较多的。就是说,本来应当是大于等于1的,越是小于1违反g(x)目标条件就越多,这样一来,选择优化的两个分量时,就有了基本的标准。

于是,先选一个违反目标条件最多的α1。如何选α2呢,先给出方法:

E i = g ( x i ) − y i E_i=g(x_i)-y_i Ei=g(xi)yi

首先,Ei为第i个样本预测的误差。
选取α2的标准就是取所有α中|E1-E2|最大的那个。
因为优化的方向是使目标函数(代价)变小的方向,所以当取了第一个α1之后,我们应该选的α2,它的误差应该与α1的误差方向相反且相差最远。比如E1是正的,我们要使优化后目标函数变小,我们最好应该选个负的E2,且越负越好。

于是这样每次只用选两个α进行优化,其它α看作定值,这样把N个解的问题,转换成了两个变量求解的问题


核函数

核函数是干嘛的?你百度半天可能都得不出结果,让老夫来好好忽悠…哦不,好好教导你吧!我们来举个例子:
这里写图片描述
这个图上有四个点,两个“+”和两个“-”,老夫让你用一个超平面(也就是画一条直线)将它们分类,你能行吗?没错!你不行,其实老夫也不行,各大数学家也不行啊,所有人都只能画像图上那样的曲线才能达到分类的效果,当初这个问题可把数学家们愁坏了。这可咋整啊?
终于,有一个骨骼清奇的骚年想了一个高招,我们给这几个点再加一个维度不就成了?让他们到三维空间里去,不就能用一个超平面来分类了?如图所示:
这里写图片描述
没错,单纯的给每个点加一个“Z”坐标,让他们从二维的变成三维的,这就是一种十分简单的核函数。
现在你们知道核函数是干嘛了的吧,没错,就是将低维线性不可分的数据映射到高维,从而使它们线性可分的"函数"。
常用的几个比较牛逼的核函数如下:
这里写图片描述
看到上面这些"骨骼清奇"的核函数,是不是有一种被吓尿了的感觉?这他娘的都是啥子玩意哦?!不要怕,这些家伙本质上和上面我介绍的那种单纯的加一个"Z"坐标的核函数是一样的。甚至这些函数比我说的那个核函数还要"low"。为啥?让老夫细细说来:
首先,作为初学者的你,看到上面这些"如同瞎扯"一般的公式,第一反应肯定是,这他娘的是咋来的哦?长了个什么样的脑子的人才能想出这种鸟玩意来?


我来告诉你,其实这些函数,从某种意义上来说,都是…瞎…写…的! 没错!就是瞎写的!
这里写图片描述
这些函数其实是几十年来,数学家们在成千上万次实验中总结出来的经验之谈(说的难听点就是瞎凑出来的函数,效果比较好,但是为啥效果好就只有老天爷知道了)
这也是我上面说这些函数比我举例子的那个简单核函数还要"low"的原因,因为我那个核函数至少能保证让数据映射到高维之后真的线性可分。而用这些奇形怪状的核函数对数据进行映射了之后,就没人知道会发生啥情况了,只能看最终效果好不好,不好咱就在换一个。没错…

换…一…个!

这里写图片描述


上文讨论的都是硬间隔SVM,软间隔SVM与硬间隔的原理类似,只是多了一项松弛因子。
软间隔SVM

干点实事儿。如图所示:
这里写图片描述
先不看那两条虚线,我们来看看中间那个这里写图片描述,根据我们上面所说的,显然用它可以将整个二维空间分成两类,而且显然使用这种方式来分类+类别和-类别效果还不错的样子。


那我们是不是大功告成了呢?我们这样分就好了呢?


我们来考虑一个问题,如果出现这种情况呢?如图所示:
这里写图片描述
这下是不是有点懵了?这TM是啥啊?没错,如果仅采用[外链图片转存失败(img-2cFWpSAB-1563502288844)(https://img-blog.csdn.net/20171023165247185?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxNDQ3NTQ3OQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)]这个超平面来很“生硬”的将空间分为非黑即白的两种类型,是不是太严格了呢?如果数据的两种类别本身就不是那么的泾渭分明呢?就像图中一样,这样划分是不是有些太“死板”了。


为了解决这种问题,数学家们想了一个办法,俗话说“水至清则无鱼”,“做人留一线”,一刀割太死板了,我们来设置一个缓冲地带吧!
没错!就是图中的两个虚线中间的区域,数学家规定落入这个区域内的样本我们已经分类正确了(换而言之就是不管它们了,无视掉),他们的特征本身就不那么“明显”,那么我们干嘛还要为此“劳神”呢?老子不管你了还不成?没错!就是这么简单!数学家们给这个方法取了个名字叫做“soft margin”。

当然,软间隔SVM除了不考虑落在缓冲带的点以外,还可以**单独(在计算支持向量时仍然不考虑它们)**计算它们的损失,比如把目标函数修改为如图:

min

1 2 ∣ ∣ w ∣ ∣ 2 + C ∑ i = 1 m l 0 / 1 ( y i ( w T x i + b ) − 1 ) \frac{1}{2}||w||^2+C\sum_{i=1}^ml_{0/1}(y_i(w^Tx_i+b)-1) 21w2+Ci=1ml0/1(yi(wTxi+b)1)
其中C>0是一个常数, l 0 / 1 l_{0/1} l0/1是“0/1损失函数”
l 0 / 1 = { 1 , i f   z &lt; 0 ; 0 ,   o t h e r w i s e . l_{0/1}=\begin{cases} 1, \quad if\ z&lt;0;\\ 0, \quad \ otherwise.\\ \end{cases} l0/1={1if z<0;0 otherwise.

显然当C无穷大时,会变回硬间隔SVM,C取0时就是我上面说的完全不考虑这些点啦。
软间隔SVM还有许多计算损失的函数:
hinge损失: l h i n g e ( z ) = max ⁡ ( 0 , 1 − z ) ; l_{hinge}(z)=\max(0,1-z); lhinge(z)=max(0,1z);
指数损失(exponential loss): l e x p ( z ) = exp ⁡ ( − z ) ; l_{exp}(z)=\exp(-z); lexp(z)=exp(z);
对率损失(logistic loss): l l o g ( z ) = log ⁡ ( 1 + exp ⁡ ( − z ) ) ; l_{log}(z)=\log (1+\exp(-z)); llog(z)=log(1+exp(z));

本文就不详解啦。


本文中的观点仅代表个人浅见,如标题所写,仅为戏言尔。
不过若能帮助到您也是我的荣幸。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值