Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >离散分布重参数化 —— Gumbel-Softmax Trick 和 Gumbel分布

离散分布重参数化 —— Gumbel-Softmax Trick 和 Gumbel分布

作者头像
为为为什么
发布于 2024-03-28 01:48:03
发布于 2024-03-28 01:48:03
3.5K0
举报
文章被收录于专栏:又见苍岚又见苍岚

重参数化也可以用在离散分布采样中,由于对我来说相比于连续分布的重参数技巧,离散重参数难理解很多,本文单独介绍离散部分的重参数化 。

简介

这篇文章从直观感觉讲起,先讲Gumbel-Softmax Trick用在哪里及如何运用,再编程感受Gumbel分布的效果,最后讨论数学证明。

问题来源

通常在强化学习中,如果动作空间是离散的,比如上、下、左、右四个动作,通常的做法是网络输出一个四维的one-hot向量(不考虑空动作),分别代表四个动作。比如 1,0,0,0 代表上,0,1,0,0 代表下等等。而具体取哪个动作呢,就根据输出的每个维度的大小,选择值最大的作为输出动作,即 arg \max (v) .

,第二个维度取到最大值 10,那么输出的动作就是 0,1,0,0,也就是说,这和多类别的分类任务是一个道理。但是这种取法有个问题是不能计算梯度,也就不能更新网络。通常的做法是加softmax函数,把向量归一化,这样既能计算梯度,同时值的大小还能表示概率的含义。softmax函数定义如下:

\sigma\left(z_{i}\right)=\frac{e{z_{i}}}{\sum_{j=1}{K} e^{z_{j}}}

那么将 v=−20,10,9.6,6.2 通过softmax函数后有

但是这么做还有一个问题,这个表示概率的向量 σ(v)=[0,0.591,0.396,0.013] 并没有真正显示出概率的含义,因为一旦某个值最大,就选择相应的动作或者分类。比如 σ(v)=[0,0.591,0.396,0.013]σ(v)=[0,0.9,0.1,0] 在类别选取的结果看来没有任何差别,都是选择第二个类别,但是从概率意义上讲差别是巨大的。所以需要一种方法不仅选出动作,而且遵从概率的含义。

很直接的方法是依概率分布采样就完事了,比如直接用np.random.choice函数依照概率生成样本值,这样概率就有意义了。这样做确实可以,但是又有一个问题冒了出来:这种方式怎么计算梯度?不能计算梯度怎么用 BP 的方式更新网络?

这时重参数(re-parameterization)技巧解决了这个问题,这里有详尽的解释,不过比较晦涩。简单来说重参数技巧的一个用处是把采样的步骤移出计算图,这样整个图就可以计算梯度BP更新了。之前我一直在想分类任务直接softmax之后BP更新不就完事了吗,为什么非得采样。后来看了VAE和GAN之后明白,还有很多需要采样训练的任务。这里举简单的VAE(变分自编码器)的例子说明需要采样训练的任务以及重参数技巧,详细内容来自视频博客

Re-parameterization Trick

原始的自编码器通常长这样:

左右两边是端到端的出入输出网络,中间的绿色是提取的特征向量,这是一种直接从图片提取特征的方式。

VAE 长这样:

VAE的想法是不直接用网络去提取特征向量,而是提取这张图像的分布特征,也就把绿色的特征向量替换为分布的参数向量,比如说均值和标准差。然后需要decode图像的时候,就从encode出来的分布中采样得到特征向量样本,用这个样本去重建图像,这时怎么计算梯度的问题就出现了。

重参数技巧可以解决这个问题,它长下面这样:

假设图中的 xϕ 表示 VAE 中的均值和标准差向量,它们是确定性的节点。而需要输出的样本 z 是带有随机性的节点,重参数就是把带有随机性的 z 变成确定性的节点,同时随机性用另一个输入节点 ϵ 代替。例如,这里用正态分布采样,原本从均值为 x 和标准差为 ϕ 的正态分布 N(x,ϕ2) 中采样得到 z 。将其转化成从标准正态分布 N(0,1) 中采样得到 ϵ ,再计算得到 z=x+ϵ⋅ϕ 。这样一来,采样的过程移出了计算图,整张计算图就可以计算梯度进行更新了,而新加的 ϵ 的输入分支不做更新,只当成一个没有权重变化的输入。

到这里,需要采样训练的任务实例以及重参数技巧基本有个概念了。

Gumbel-Max trick

VAE 的例子是一个连续分布(正态分布)的重参数,离散分布的情况也一样,首先需要可以采样,使得离散的概率分布有意义而不是只取概率最大的值,其次需要可以计算梯度。那么怎么做到的,具体操作如下:

噪声,再取样:

x_{\pi}=\arg \max \left(\log \left(\pi_{i}\right)+G_{i}\right)

其中,

这就是 Gumbel-Max trick

Gumbel-Softmax Trick

可以通过Gumbel分布求逆从均匀分布生成,即:

G_{i}=-\log \left(-\log \left(U_{i}\right)\right), U_{i} \sim U(0,1)
具体实践
  • 对于网络输出的一个 n 维向量 v ,生成 n 个服从均匀分布 U(0,1) 的独立样本 ϵ_1,…,ϵ_n
  • 通过 G_i=−log(−log(ϵ_i)) 计算得到 G_i
  • 对应相加得到新的值向量 v′=[v_1+G_1,v_2+G_2,…,v_n+G_n]
  • 通过 softmax 函数
\sigma_{\tau}\left(v_{i}{\prime}\right)=\frac{e{v_{i}^{\prime} / \tau}}{\sum_{j=1}^{n} e{v_{j}{\prime} / \tau}}

计算概率大小得到最终的类别。其中 τ 是温度参数。

直观上感觉,对于强化学习来说,在选择动作之前加一个扰动,相当于增加探索度,感觉上是合理的。对于深度学习的任务来说,添加随机性去模拟分布的样本生成,也是合情合理的。

Gumbel分布采样效果

为什么使用Gumbel分布生成随机数,就能模拟离散概率分布的样本呢?这部分使用代码模拟来感受它的优越性。这部分例子和代码来自这里

Gumbel分布的概率密度函数:

p(x)=\frac{1}{\beta} e{-z-e{-z}}

其中

极值分布

Gumbel分布是一类极值分布,那么它表示什么含义呢?

这里举一个类似的喝水的例子。

比如你每天都会喝很多次水(比如100次),每次喝水的量也不一样。假设每次喝水的量服从正态分布 N(μ,σ_2) (其实也有点不合理,毕竟喝水的多少不能取为负值,不过无伤大雅能理解就好,假设均值为5),那么每天100次喝水里总会有一个最大值,这个最大值服从的分布就是Gumbel分布。实际上,只要是指数族分布,它的极值分布都服从Gumbel分布。那么上面这个例子的分布长什么样子呢,作图有:

代码语言:text
AI代码解释
复制
from scipy.optimize import curve_fit
import numpy as np
import matplotlib.pyplot as plt
mean_hunger = 5
samples_per_day = 100
n_days = 10000
samples = np.random.normal(loc=mean_hunger, size=(n_days, samples_per_day))
daily_maxes = np.max(samples, axis=1)

def gumbel_pdf(prob,loc,scale):
    z = (prob-loc)/scale
    return np.exp(-z-np.exp(-z))/scale

def plot_maxes(daily_maxes):
    probs,hungers,_=plt.hist(daily_maxes,density=True,bins=100)
    plt.xlabel('Volume')
    plt.ylabel('Probability of Volume being daily maximum')
    (loc,scale),_=curve_fit(gumbel_pdf,hungers[:-1],probs)
    #curve_fit用于曲线拟合
    #接受需要拟合的函数(函数的第一个参数是输入,后面的是要拟合的函数的参数)、输入数据、输出数据
    #返回的是函数需要拟合的参数
    # https://blog.csdn.net/guduruyu/article/details/70313176
    plt.plot(hungers,gumbel_pdf(hungers,loc,scale))
    
plt.figure()
plot_maxes(daily_maxes)
plt.show()
pass

那么gumbel分布在离散分布的采样中效果如何呢?可以作图比较一下。先定义一个多项分布,作出真实的概率密度图。再通过采样的方式比较各种方法的效果。

如下代码定义了一个7类别的多项分布,其真实的密度函数如下图

代码语言:text
AI代码解释
复制
from scipy.optimize import curve_fit
import numpy as np
import matplotlib.pyplot as plt


n_cats = 7
cats = np.arange(n_cats)
probs = np.random.randint(low=1, high=20, size=n_cats)
probs = probs / sum(probs)
logits = np.log(probs)
def plot_probs():
    plt.bar(cats, probs)
    plt.xlabel("Category")
    plt.ylabel("Probability")


n_samples = 1000
def plot_estimated_probs(samples,ylabel=''):
    n_cats = np.max(samples)+1
    estd_probs,_,_ = plt.hist(samples,bins=np.arange(n_cats+1),align='left',edgecolor='white',density=True)
    plt.xlabel('Category')
    plt.ylabel(ylabel+'Estimated probability')
    return estd_probs

def print_probs(probs):
    print(probs.tolist())

samples = np.random.choice(cats,p=probs,size=n_samples) 

def sample_gumbel(logits):
    noise = np.random.gumbel(size=len(logits))
    sample = np.argmax(logits+noise)
    return sample
gumbel_samples = [sample_gumbel(logits) for _ in range(n_samples)]

def sample_uniform(logits):
    noise = np.random.uniform(size=len(logits))
    sample = np.argmax(logits+noise)
    return sample
uniform_samples = [sample_uniform(logits) for _ in range(n_samples)]

def sample_normal(logits):
    noise = np.random.normal(size=len(logits))
    sample = np.argmax(logits+noise)
    return sample
normal_samples = [sample_normal(logits) for _ in range(n_samples)]

plt.figure(figsize=(10,4))
plt.subplot(1,4,1)
plot_probs()
plt.subplot(1,4,2)
gumbel_estd_probs = plot_estimated_probs(gumbel_samples,'Gumbel ')
plt.subplot(1,4,3)
normal_estd_probs = plot_estimated_probs(normal_samples,'Normal ')
plt.subplot(1,4,4)
uniform_estd_probs = plot_estimated_probs(uniform_samples,'Uniform ')
plt.tight_layout()

print('Original probabilities:\t\t',end='')
print_probs(probs)
print('Gumbel Estimated probabilities:\t',end='')
print_probs(gumbel_estd_probs)
print('Normal Estimated probabilities:\t',end='')
print_probs(normal_estd_probs)
print('Uniform Estimated probabilities:',end='')
print_probs(uniform_estd_probs)

plt.figure()
plt.subplot(1,2,1)
plot_probs()
plt.subplot(1,2,2)
estd_probs = plot_estimated_probs(samples)
plt.tight_layout()#紧凑显示图片

print('Original probabilities:\t\t',end='')
print_probs(probs)
print('Estimated probabilities:\t',end='')
print_probs(estd_probs)

plt.figure()
plot_probs()
plt.show()
pass
代码语言:text
AI代码解释
复制
Original probabilities:         [0.24675324675324675, 0.1038961038961039, 0.03896103896103896, 0.23376623376623376, 0.09090909090909091, 0.14285714285714285, 0.14285714285714285]
Estimated probabilities:        [0.26, 0.109, 0.041, 0.244, 0.087, 0.113, 0.146]

真实分布

随机采样,就是真实分布

要是没有不能求梯度这个问题,直接从原分布采样是再好不过的。

接着通过前述的方法添加Gumbel噪声采样,同时也添加正态分布和均匀分布的噪声作对比

代码语言:text
AI代码解释
复制
from scipy.optimize import curve_fit
import numpy as np
import matplotlib.pyplot as plt


n_cats = 7
cats = np.arange(n_cats)
probs = np.random.randint(low=1, high=20, size=n_cats)
probs = probs / sum(probs)
logits = np.log(probs)
def plot_probs():
    plt.bar(cats, probs)
    plt.xlabel("Category")
    plt.ylabel("Probability")


n_samples = 1000
def plot_estimated_probs(samples,ylabel=''):
    n_cats = np.max(samples)+1
    estd_probs,_,_ = plt.hist(samples,bins=np.arange(n_cats+1),align='left',edgecolor='white',density=True)
    plt.xlabel('Category')
    plt.ylabel(ylabel+'Estimated probability')
    return estd_probs

def print_probs(probs):
    print(probs.tolist())

samples = np.random.choice(cats,p=probs,size=n_samples) 

def sample_gumbel(logits):
    noise = np.random.gumbel(size=len(logits))
    sample = np.argmax(logits+noise)
    return sample
gumbel_samples = [sample_gumbel(logits) for _ in range(n_samples)]

def sample_uniform(logits):
    noise = np.random.uniform(size=len(logits))
    sample = np.argmax(logits+noise)
    return sample
uniform_samples = [sample_uniform(logits) for _ in range(n_samples)]

def sample_normal(logits):
    noise = np.random.normal(size=len(logits))
    sample = np.argmax(logits+noise)
    return sample
normal_samples = [sample_normal(logits) for _ in range(n_samples)]

plt.figure(figsize=(10,4))
plt.subplot(1,4,1)
plot_probs()
plt.subplot(1,4,2)
gumbel_estd_probs = plot_estimated_probs(gumbel_samples,'Gumbel ')
plt.subplot(1,4,3)
normal_estd_probs = plot_estimated_probs(normal_samples,'Normal ')
plt.subplot(1,4,4)
uniform_estd_probs = plot_estimated_probs(uniform_samples,'Uniform ')
plt.tight_layout()

print('Original probabilities:\t\t',end='')
print_probs(probs)
print('Gumbel Estimated probabilities:\t',end='')
print_probs(gumbel_estd_probs)
print('Normal Estimated probabilities:\t',end='')
print_probs(normal_estd_probs)
print('Uniform Estimated probabilities:',end='')
print_probs(uniform_estd_probs)

plt.figure()
plt.subplot(1,2,1)
plot_probs()
plt.subplot(1,2,2)
estd_probs = plot_estimated_probs(samples)
plt.tight_layout()#紧凑显示图片

print('Original probabilities:\t\t',end='')
print_probs(probs)
print('Estimated probabilities:\t',end='')
print_probs(estd_probs)

plt.figure()
plot_probs()
plt.show()
pass

代码语言:text
AI代码解释
复制
Original probabilities:         [0.24675324675324675, 0.1038961038961039, 0.03896103896103896, 0.23376623376623376, 0.09090909090909091, 0.14285714285714285, 0.14285714285714285]
Gumbel Estimated probabilities: [0.23, 0.109, 0.034, 0.219, 0.089, 0.16, 0.159]
Normal Estimated probabilities: [0.29, 0.094, 0.012, 0.284, 0.054, 0.138, 0.128]
Uniform Estimated probabilities:[0.523, 0.002, 0.0, 0.419, 0.0, 0.028, 0.028]

可以明显看到Gumbel噪声的采样效果是最好的,正态分布其次,均匀分布最差。也就是说可以用Gumbel分布做Re-parameterization使得整个图计算可导,同时样本点最接近真实分布的样本。

数学证明

为什么添加 Gumbel 噪声有如此效果,下面阐述问题并给出证明。

,通过 softmax 函数可得,取到每个维度的概率为:

\pi_{k}=\frac{e{x_{k}}}{\sum_{k{\prime}=1}^{K} e{x_{k{\prime}}}}

这是直接 softmax 得到的概率密度函数,如果换一种方式,对每个

下面给出Gumbel分布的概率密度函数和分布函数,并证明这件事情。

的Gumbel分布的PDF为:

f(z ; \mu)=e{-(z-\mu)-e{-(z-\mu)}}

CDF为

F(z ; \mu)=e{-e{-(z-\mu)}}

假设第,即:

P\left(z_{k} \geq z_{k^{\prime}} ; \forall k^{\prime} \neq k \mid\left{x_{k{\prime}}\right}_{k{\prime}=1}^{K}\right)=\pi_{k}

关于 的条件累积概率分布函数为

\begin{array}{c}P\left(z_{k} \geq z_{k^{\prime}} ; \forall k^{\prime} \neq k \mid z_{k},\left{x_{k{\prime}}\right}_{k{\prime}=1}^{K}\right)=P\left(z_{1} \leq z_{k}\right) P\left(z_{2} \leq z_{k}\right) \cdots P\left(z_{k-1} \leq z_{k}\right) P\left(z_{k+1} \leq z_{k}\right) \cdots \ \cdot P\left(z_{K} \leq z_{k}\right)\end{array}

即:

P\left(z_{k} \geq z_{k^{\prime}} ; \forall k^{\prime} \neq k \mid z_{k},\left{x_{k{\prime}}\right}_{k{\prime}=1}{K}\right)=\prod_{k{\prime} \neq k} e{-e{-\left(z_{k}-x_{k^{\prime}}\right)}}

对 求积分可得边缘累积概率分布函数

P\left(z_{k} \geq z_{k^{\prime}} ; \forall k^{\prime} \neq k \mid\left{x_{k{\prime}}\right}_{k{\prime}=1}^{K}\right)=\int P\left(z_{k} \geq z_{k^{\prime}} ; \forall k^{\prime} \neq k \mid z_{k},\left{x_{k{\prime}}\right}_{k{\prime}=1}^{K}\right) \cdot f\left(z_{k} ; x_{k}\right) d z_{k}

带入式子有

P\left(z_{k} \geq z_{k^{\prime}} ; \forall k^{\prime} \neq k \mid\left{x_{k{\prime}}\right}_{k{\prime}=1}^{K}\right)=\int \prod_{k^{\prime} \neq k} e{-e{-\left(z_{k}-x_{k}\right)}} \cdot e{-\left(z_{k}-x_{k}\right)-e{-\left(z_{k}-x_{k}\right)}} d z_{k}

化简有

\begin{array}{l}P\left(z_{k} \geq z_{k^{\prime}} ; \forall k^{\prime} \neq k \mid\left{x_{k{\prime}}\right}_{k{\prime}=1}^{K}\right) \ =\int \prod_{k^{\prime} \neq k} e{-e{-\left(z_{k}-x_{k^{\prime}}\right)}} \cdot e{-\left(z_{k}-x_{k}\right)-e{-\left(z_{k}-x_{k}\right)}} d z_{k} \ =\int e{-\sum_{k{\prime} \neq k} e{-\left(z_{k}-x_{k{\prime}}\right)}-\left(z_{k}-x_{k}\right)-e^{-\left(z_{k}-x_{k}\right)}} d z_{k} \ =\int e{-\sum_{k{\prime}=1}^{K} e{-\left(z_{k}-x_{k{\prime}}\right)}-\left(z_{k}-x_{k}\right)} d z_{k} \ =\int e{-\left(\sum_{k{\prime}=1}^{K} e{x{\prime}}\right) e^{-z_{k}-z_{k}+x_{k}}} d z_{k} \ =\int e{-e{-z_{k}+\ln \left(\sum_{k{\prime}=1}{K} e{\left.x_{k{\prime}}\right)}\right.}-z_{k}+x_{k}} d z_{k} \ =\int e{-e{-\left(z_{k}-\ln \left(\sum_{k{\prime}=1}{K} e{x_{k{\prime}}}\right)\right)}-\left(z_{k}-\ln \left(\sum_{k{\prime}=1}{K} e{x_{k{\prime}}}\right)\right)-\ln \left(\sum_{k{\prime}=1}{K} e{x_{k{\prime}}}\right)+x_{k}} d z_{k} \ =e^{-\ln \left(\sum_{k{\prime}=1}{K} e{x_{k{\prime}}}\right)+x_{k}} \int e{-e{-\left(z_{k}-\ln \left(\sum_{k{\prime}=1}{K} e{\left.x_{k{\prime}}\right)}\right)\right.}-\left(z_{k}-\ln \left(\sum_{k{\prime}=1}{K} e{x_{k{\prime}}}\right)\right)} d z_{k} \ =\frac{e{x_{k}}}{\sum_{k{\prime}=1}^{K} e{x_{k{\prime}}}} \int e{-e{-\left(z_{k}-\ln \left(\sum_{k{\prime}=1}{K} e{x_{k{\prime}}}\right)\right)}-\left(z_{k}-\ln \left(\sum_{k{\prime}=1}{K} e{x_{k{\prime}}}\right)\right)} d z_{k} \ =\frac{e{x_{k}}}{\sum_{k{\prime}=1}^{K} e{x_{k{\prime}}}} \int e^{-\left(z_{k}-\ln \left(\sum_{k{\prime}=1}{K} e{x_{k{\prime}}}\right)\right)-e^{-\left(z_{k}-\ln \left(\sum_{k{\prime}=1}{K} e{x_{k{\prime}}}\right)\right)}} d z_{k} \\end{array}

积分里面是 的Gumbel分布,所以整个积分为1。则有

P\left(z_{k} \geq z_{k^{\prime}} ; \forall k^{\prime} \neq k \mid\left{x_{k{\prime}}\right}_{k{\prime}=1}{K}\right)=\frac{e{x_{k}}}{\sum_{k{\prime}=1}{K} e{x_{k{\prime}}}}

这和softmax的结果一致。

参考资料

文章链接: https://cloud.tencent.com/developer/article/2401857

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-3-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
基于梯度的NLP对抗攻击方法
Facebook提出了一种NLP通用的攻击方法,而且可以通过梯度优化,论文发表在EMNLP2021,名为Gradient-based Adversarial Attacks against Text Transformers,源码在facebookresearch/text-adversarial-attack
mathor
2021/11/15
1.2K0
python实现10种概率分布(附代码)
在概率论和统计学中,均匀分布也被称为矩形分布。这种分布可以通过两个参数a和b来定义,它们分别是数轴上的最小值和最大值,因此通常表示为U(a, b)。
皮大大
2024/08/07
1.1K0
TF-char7-反向传播法
向量\left(\frac{\partial \mathcal{L}}{\partial \theta_{1}}, \frac{\partial \mathcal{L}}{\partial \theta_{2}}, \frac{\partial \mathcal{L}}{\partial \theta_{3}}, \ldots \frac{\partial \mathcal{L}}{\partial \theta_{n}}\right)叫做函数的梯度
皮大大
2021/03/01
3310
TF-char7-反向传播法
高斯混合模型:GMM和期望最大化算法的理论和代码实现
高斯混合模型(gmm)是将数据表示为高斯(正态)分布的混合的统计模型。这些模型可用于识别数据集中的组,并捕获数据分布的复杂、多模态结构。
deephub
2023/12/04
7150
高斯混合模型:GMM和期望最大化算法的理论和代码实现
不愧商汤,一面巨深入。。
Softmax函数主要用于多类别分类问题中,它通过对原始的类别分数进行转换,将它们转化为概率分布。这个过程使得模型的输出更容易解释为各个类别的概率。
Python编程爱好者
2024/01/11
2590
不愧商汤,一面巨深入。。
标准化流 Normalization Flow
标准化流能把简单的地摊货概率密度(比如高斯分布)形式转换成某种高大上的分布形式。它可以用在产生式模型、强化学习、变分推断之类的地方。
为为为什么
2023/05/21
8510
标准化流 Normalization Flow
直方图与核密度估计
直方图是一种经常被用于统计的图形表达形式,简单来说它的功能就是用一系列的样本数据,去分析样本的分布规律。而直方图跟核密度估计(Kernel Density Estimation,KDE)方法的主要差别在于,直方图得到的是一个离散化的统计分布,而KDE方法得到的是一个连续的概率分布函数。如果将得到的分布重新用于采样,两者都可以结合蒙特卡洛方法实现这样的功能,但是KDE的优点在于它得到的结果是可微分的,那么就可以应用于有偏估计的分子动力学模拟中,如元动力学(Meta Dynamics)方法。这里主要用Python实现一个简单的KDE函数的功能,也顺带介绍一下Numpy和Matplotlib中关于直方图的使用方法。
DechinPhy
2024/04/18
3070
直方图与核密度估计
概率论整理(三)
一组独立同分布的随机变量:\(X_1,X_2,X_3,...,X_n\),期望μ,方差\(σ^2\),则这组随机变量的均值为
算法之名
2023/10/16
3750
概率论整理(三)
NumPyML 源码解析(四)
The wrappers.py module implements wrappers for the layers in layers.py. It includes
ApacheCN_飞龙
2024/02/17
4130
概率和分布
概率空间:sample space,events space和probability function
esse LL
2024/08/07
1430
14种异常检测方法汇总(附代码)!
今天给大家分享一篇关于异常检测的文章,重点介绍了14种公开网络上一些常见的异常检测方法(附资料来源和代码)。
小白学视觉
2022/12/27
3.1K0
14种异常检测方法汇总(附代码)!
【机器学习 | Adaboost原理&实现】
可以发现,指数损失函数在【正确\错误】分类的样本的值【小于\大于】1,正好符合Adaboost加法模型的实现思路,<u>在加入新的弱学习器中【提高\降低】分类【错误\正确】样本的权值</u>,所以第$m$个弱分类器,第$i$个样本的权值更新可以设计为:
九年义务漏网鲨鱼
2025/06/27
900
Hands on Reinforcement Learning Frontier Chapter
虽然强化学习不需要有监督学习中的标签数据,但它十分依赖奖励函数的设置。有时在奖励函数上做一些微小的改动,训练出来的策略就会有天差地别。在很多现实场景中,奖励函数并未给定,或者奖励信号极其稀疏,此时随机设计奖励函数将无法保证强化学习训练出来的策略满足实际需要。例如,对于无人驾驶车辆智能体的规控,其观测是当前的环境感知恢复的 3D 局部环境,动作是车辆接下来数秒的具体路径规划,那么奖励是什么?如果只是规定正常行驶而不发生碰撞的奖励为+1,发生碰撞为-100,那么智能体学习的结果则很可能是找个地方停滞不前。具体能帮助无人驾驶小车规控的奖励函数往往需要专家的精心设计和调试。
一只野生彩色铅笔
2023/04/27
8000
Hands on Reinforcement Learning Frontier Chapter
深入理解与实践:Softmax函数在机器学习中的应用
今日推荐:前端小白使用Docsify+Markdown+‌Vercel,无服务器部署个人知识库原创
小说男主
2024/12/01
7580
深入理解与实践:Softmax函数在机器学习中的应用
numpy的random模块
For random samples from N(\mu, \sigma^2), use:
hankleo
2020/09/16
4030
理论+实践!14 种异常检测方法总结!
Z-score为标准分数,测量数据点和平均值的距离,若A与平均值相差2个标准差,Z-score为2。当把Z-score=3作为阈值去剔除异常点时,便相当于3sigma。
Python编程爱好者
2024/03/19
8750
理论+实践!14 种异常检测方法总结!
统计力学中的概率论基础(二)
接上一篇文章,我们继续记录统计力学中的一些基础的概率论知识。这一篇文章主要介绍的是一些常用的概率密度函数的对应参数计算,如期望值、方差等。
DechinPhy
2024/05/15
3220
统计力学中的概率论基础(二)
深度学习应用篇-元学习[14]:基于优化的元学习-MAML模型、LEO模型、Reptile模型
Model-Agnostic Meta-Learning (MAML): 与模型无关的元学习,可兼容于任何一种采用梯度下降算法的模型。 MAML 通过少量的数据寻找一个合适的初始值范围,从而改变梯度下降的方向, 找到对任务更加敏感的初始参数, 使得模型能够在有限的数据集上快速拟合,并获得一个不错的效果。 该方法可以用于回归、分类以及强化学习。
汀丶人工智能
2023/10/11
1.9K0
深度学习应用篇-元学习[14]:基于优化的元学习-MAML模型、LEO模型、Reptile模型
简单易学的机器学习算法——受限玻尔兹曼机RBM
受限玻尔兹曼机(Restricted Boltzmann Machine, RBM)是一种基于能量模型的神经网络模型,在Hinton提出针对其的训练算法(对比分歧算法)后,RBM得到了更多的关注,利用RBM的堆叠可以构造出深层的神经网络模型——深度信念网(Deep Belief Net, DBN)。下面简单介绍二值型RBM的主要内容。
felixzhao
2019/01/31
1.1K0
简单易学的机器学习算法——受限玻尔兹曼机RBM
稀疏Softmax(Sparse Softmax)
本文源自于SPACES:“抽取-生成”式长文本摘要(法研杯总结),原文其实是对一个比赛的总结,里面提到了很多Trick,其中有一个叫做稀疏Softmax(Sparse Softmax)的东西吸引了我的注意,查阅了很多资料以后,汇总在此
mathor
2021/07/19
2K0
相关推荐
基于梯度的NLP对抗攻击方法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档