求通俗解释下bandit老虎机是个什么东西?
在说bandit
之前先考虑一个实际问题:假设你来到一个新的城市,你刚开始选择去哪吃饭可能随机选一选,你大概会知道哪些店比较符合你的口味。当你有了一些基本的判断之后,你是会选择吃原来觉得好吃的店呢?还是探索你从来都没有去过的店呢?从来都没有去过的店你可能会觉得更好吃,也有可能不会。人的选择一般都是探索一点点,大部分时候都会选择以前觉得还可以的店。这中间就有个度的问题。在计算机中怎么量化这个度呢,其实还是蛮难的。
可以看出上述问题明显是一个决策性问题,并且是单步决策问题,在强化学习中当前所采取的动作会影响之后的决策,甚至有时候为了获取未来期望的最大回报,我们当前决策可能并不会采取能够获得及时奖励最大的那个动作,像下围棋这种是连续决策问题。单步决策就只有一个状态,选择某个动作,然后游戏结束,开始新一轮游戏。因此Multi-armed Bandit
相关的算法的关键都在于如何平衡探索和利用(trade off exploration and exploitation
)。这类问题的建模过程可以被用于其它领域,比如像逛淘宝,买东西等等都可以建模成此类问题。甚至可以用于药物研发:
在药物设计问题上面,开发一款药,不同的成分比例对病人的实际应用效果不一样,那究竟是什么样的比例能够把病人快速治好呢?此时动作就变成了选择某个成分的药品,奖励来自病人的反馈(是否痊愈,以及痊愈程度),我们要做的事情就是用最少的病人,发现这个药物的成分的最佳比例。
bandit
老虎机描述的就是这样一类问题的数学模型。(下文对其基本算法展开说明):
Stochastic Bandits
让我们考虑一个最基本的Stochastic Bandits
问题,定义如下:
状态集合为single state
:S={s}S=\{s\}S={s};一个动作集合AAA,动作此时对应arms
,采取某个动作(或者选中某个arm
)时,将会得到一个及时奖励的反馈,通常是属于[0,1][0,1][0,1]的一个标量。
与传统的强化学习不一样的地方在于这里没有转移函数(transition function
),因为其只有一个单个的状态。智能体需要学习的是随机的奖励函数stochastic reward function
。也就是说智能体在采样过程中,依据采样数据学习奖励函数分布,从而进一步指导接下来的动作(如果知道某个arm
能够获得更多的奖励,那之后就一直选择这个arm
,就能获得更多的奖励)。
对于多臂老虎机,描述起来都是比较简单的一个问题,但是最优解求解比较困难,对于上述问题看起来就没有什么思路。
- Greedy strategy:
多想一下可能会有一个贪婪策略(greedy strategy
),就是选择当前平均奖励最高的那个arm
,但是这种贪婪策略就没有考虑探索,比如有两个arm
,当选择了其中一个arm-1
这次得到奖励1
,而另一个arm-2
奖励为0
,之后依据贪婪策略就一直选择arm-1
,但arm-1
实际的奖励为1
的概率为0.1
比arm-2
奖励为1
的概率0.9
低呢?只不过刚好第一次被选中了而已,就很容易丢失掉探索,导致得到一个次优解。
- ε\varepsilonε-greedy:
而ε\varepsilonε-greedy方式说的是以一个ε\varepsilonε概率随机选择arm
,而1−ε1-\varepsilon1−ε概率选择greedy
策略,也就是选择当前平均奖励最高的那个arm
。由此可以看出收敛率(多快找到最优的arm
)会取决于ε\varepsilonε。一旦找到最优的arm,
我们要衡量算法的好坏的话,需要定义一个指标,遗憾值(Regret
)。
定义R(a)R(a)R(a)为某个arm
的实际平均奖励值(或者称之为期望奖励)。如果我们知道了每个arm
的平均奖励值,那我们可以找到具有最高平均奖励的那个arm
,即:
r∗=maxaR(a)r^{*}=\max_{a}R(a) r∗=amaxR(a)
也就找到了具有最高平均奖励所对应的动作aaa:
a∗=argmaxaR(a)a^{*} = arg\max_{a}R(a) a∗=argamaxR(a)
但是我们并不知道每个arm
的实际真实平均奖励R(a)R(a)R(a),但是我们可以定义一个loss
,用于衡量采取某个动作的好坏。对于每个动作与最优的动作比较,其二者之差可以定义为loss
:
loss(a)=r∗−R(a)loss(a)=r^{*}-R(a) loss(a)=r∗−R(a)
nnn time step
下的期望累计遗憾可表示为:
Lossn=∑t=1nloss(at)Loss_{n}=\sum_{t=1}^{n}loss(a_{t}) Lossn=t=1∑nloss(at)
理论分析
我们之前在讨论strategy
的时候说过ε\varepsilonε-greedy策略,那在定义好了衡量指标遗憾值regret
时如何来进行理论分析呢?分析其本质规律。
- 如果ε\varepsilonε 是个常量,
time step
足够大的话,Pr(at≠a∗)≈εPr(a_{t} \neq a^{*}) \approx \varepsilonPr(at=a∗)≈ε(近似随机选择的arm
都会后悔regret
),此时的期望累计遗憾值 Loss≈∑t=1nε=O(n)Loss \approx \sum_{t=1}^{n} \varepsilon =O(n)Loss≈∑t=1nε=O(n)(这里只需要其是线性的就可以)。 - 如果 εt∝1/t\varepsilon_{t} \propto 1/tεt∝1/t,也就是随着
time step
增加,ε\varepsilonε逐渐收敛。time step
足够大的话,Pr(at≠a∗)≈εt=O(1t)Pr(a_{t} \neq a^{*}) \approx \varepsilon_{t}=O(\frac{1}{t})Pr(at=a∗)≈εt=O(t1),也就是说随着time step
的增加,次优解会逐渐减少,此时的期望累计遗憾值 Loss≈∑t=1n1t=O(logn)Loss \approx \sum_{t=1}^{n} \frac{1}{t} =O(log n)Loss≈∑t=1nt1=O(logn)(这里只需要其是对数级的就可以)。
线性级的遗憾值无法收敛,是无法得到最优解的,只能得到一个次优解。因此我们期望说能够找到一个遗憾值能尽快收敛的策略,若εt∝1/t\varepsilon_{t} \propto 1/tεt∝1/t是可以使得遗憾值达到收敛的。
Empirical mean
那经验平均奖励R~(a)\tilde{R}(a)R~(a)与真实的平均奖励R(a)R(a)R(a)差多少呢?如果其两者差值存在一个上界(upper bound
),如∣R(a)−R~(a)∣≤bound|R(a)-\tilde{R}(a)| \leq \text{bound}∣R(a)−R~(a)∣≤bound,随着数据的采集,上界逐渐收敛:limn→∞UBn(a)=R(a)\lim _{n \rightarrow \infty} U B_{n}(a)=R(a)limn→∞UBn(a)=R(a),那经验平均奖励也将逼近真实的奖励。此时的最优算法求解就是在每一步选择最大的upper bound
对应的那个arm
,即 argmaxaUBn(a)\operatorname{argmax}_{a} U B_{n}(a)argmaxaUBn(a)。因此当upper bound
收敛的时候,由于一直选取最大的upper bound
对应的那个arm
,我们得到的最优动作就是a∗a^{*}a∗。
此时的问题就在于我们通过sample
的方法是无法得到确定的upper bound
的。就是基于采样的方法并不能得到真实的每个arm
对应的奖励分布。我们可以采用概率的方法来表示,就是在采样过程中,R(a)R(a)R(a)小于等于上界是以一定的概率出现的,如:Pr(R(a)≤f(a))≥1−δ\operatorname{Pr}(R(a) \leq f(a)) \geq 1-\deltaPr(R(a)≤f(a))≥1−δ,依据霍夫丁不等式(Hoeffding’s inequality
)有:
Pr(R(a)≤R~(a)+log(1δ)2na)≥1−δ\operatorname{Pr}(R(a) \leq \tilde{R}(a)+\sqrt{\frac{\log \left(\frac{1}{\delta}\right)}{2 n_{a}}}) \geq 1-\deltaPr(R(a)≤R~(a)+2nalog(δ1))≥1−δ
其中 nan_{a}na 是arm a
尝试的次数。δn\delta_{n}δn通常设置为1/n41/n^{4}1/n4,使得算法收敛快一些。基于霍夫丁上界我们可以得到选择动作的最优策略:
尽管上述算法理论上有收敛性保证,但是需要sample
多次。
Bayesian Bandits
能够更好地描述不确定性,在智能体平衡探索和利用的时候也是在决策不确定性,当智能体选择探索的时候不确定性更大一点,当选智能体择利用以往经验知识的时候不确定性就更小一点。用贝叶斯的方法来描述这种不确定性分布就是bayesian bandits
。另一种能够获取更多状态信息的bandits
方法称之为Contextual Bandits
。
Bayesian Bandits
在开始贝叶斯多臂老虎机之前我们需要先定义贝叶斯学习(Bayesian Learning
)。
当我们采取某个动作aaa时,我们能够得到一个随机的奖励值rar^{a}ra,它是从某个分布中采样得到的。也就是说奖励的分布是不确定的,服从某个参数分布θ\thetaθ,Pr(ra;θ)Pr(r^{a};\theta)Pr(ra;θ)。而我们关心的是这个随机奖励Pr(ra;θ)Pr(r^{a};\theta)Pr(ra;θ)的期望值R(a)=E[ra]R(a)=E[r^{a}]R(a)=E[ra]。
因此我们可以把这种不确定性表述为一个先验分布Pr(θ)Pr(\theta)Pr(θ),我们需要做的事情就是通过采样获取数据 r1a,r2a,⋯,rnar_{1}^{a},r_{2}^{a},\cdots,r_{n}^{a}r1a,r2a,⋯,rna,依据这些采样得到的结果去估算后验分布Pr(θ∣r1a,r2a,⋯,rna)Pr(\theta|r_{1}^{a},r_{2}^{a},\cdots,r_{n}^{a})Pr(θ∣r1a,r2a,⋯,rna)。一旦知道这个后验分布,也就是求解出了bandits
的奖励分布。那这个后验分布怎么求呢?依据贝叶斯定理有:
Pr(θ∣r1a,r2a,…,rna)∝Pr(θ)Pr(r1a,r2a,…,rna∣θ)\operatorname{Pr}\left(\theta | r_{1}^{a}, r_{2}^{a}, \ldots, r_{n}^{a}\right) \propto \operatorname{Pr}(\theta) \operatorname{Pr}\left(r_{1}^{a}, r_{2}^{a}, \ldots, r_{n}^{a} | \theta\right)Pr(θ∣r1a,r2a,…,rna)∝Pr(θ)Pr(r1a,r2a,…,rna∣θ)
假设我们已经求得这个后验分布,我们就可以去估计下一个时刻的奖励rar^{a}ra的分布:
Pr(ra∣r1a,r2a,…,rna)=∫θPr(ra;θ)Pr(θ∣r1a,r2a,…,rna)dθ\operatorname{Pr}\left(r^{a} | r_{1}^{a}, r_{2}^{a}, \ldots, r_{n}^{a}\right)=\int_{\theta} \operatorname{Pr}\left(r^{a} ; \theta\right) \operatorname{Pr}\left(\theta | r_{1}^{a}, r_{2}^{a}, \ldots, r_{n}^{a}\right) d \thetaPr(ra∣r1a,r2a,…,rna)=∫θPr(ra;θ)Pr(θ∣r1a,r2a,…,rna)dθ
而我们关心的是每个arm
的平均奖励R(a)R(a)R(a),因此我们需要依据采样所得到的数据去估计平均奖励,如果θ\thetaθ是期望奖励 θ=R(a)\theta=R(a)θ=R(a),有:
Pr(R(a)∣r1a,r2a,…,rna)=Pr(θ∣r1a,r2a,…,rna)\operatorname{Pr}\left(R(a) | r_{1}^{a}, r_{2}^{a}, \ldots, r_{n}^{a}\right)=\operatorname{Pr}\left(\theta | r_{1}^{a}, r_{2}^{a}, \ldots, r_{n}^{a}\right)Pr(R(a)∣r1a,r2a,…,rna)=Pr(θ∣r1a,r2a,…,rna)
到此,我们就可以计算最优策略。与之前的UCB
算法对比:
UCB
解决arm
奖励分布不确定性用的是bound
的方式,通过迭代求解bound
来获得真实的期望奖励R(a)R(a)R(a):Pr(R(a)≤bound (r1a,r2a,…,rna))≥1−δ\operatorname{Pr}\left(R(a) \leq \text { bound }\left(r_{1}^{a}, r_{2}^{a}, \dots, r_{n}^{a}\right)\right) \geq 1-\deltaPr(R(a)≤ bound (r1a,r2a,…,rna))≥1−δ。Bayesian techniques:并不通过求解
upper bound
,而是直接对其进行建模求解,直接求解arm
奖励分布的概率。Coin Example:
举个例子,假设我们有两枚硬币C1C_{1}C1和C2C_{2}C2。两枚硬币head
朝上的概率不一样,可表示为:
R(C1)=Pr(C1=head )R(C2)=Pr(C2=head )\begin{array}{l} R\left(C_{1}\right)=\operatorname{Pr}\left(C_{1}=\text { head }\right) \\ R\left(C_{2}\right)=\operatorname{Pr}\left(C_{2}=\text { head }\right) \end{array}R(C1)=Pr(C1= head )R(C2)=Pr(C2= head )
期望在kkk次掷币过程中最大化head
的次数。那每次掷币我们因该选择哪个coin
呢?可以量化每个coin
的奖励分布rC1,rC2r^{C_{1}},r^{C_{2}}rC1,rC2会满足一个伯努利分布{0,1}\{0,1\}{0,1}。我们可以用一个参数θ\thetaθ表示获得奖励的分布:
- Pr(rC1;θ1)=θ1=R(C1)Pr(r^{C_{1}};\theta_{1})=\theta_{1}=R(C_{1})Pr(rC1;θ1)=θ1=R(C1)
- Pr(rC2;θ2)=θ2=R(C2)Pr(r^{C_{2}};\theta_{2})=\theta_{2}=R(C_{2})Pr(rC2;θ2)=θ2=R(C2)
若我们知道θ\thetaθ的真实值,我们可以依据θ\thetaθ来选择能够获得平均奖励最大的coin
。设定θ\thetaθ的先验分布Pr(θ)Pr(\theta)Pr(θ)是beta
分布,则有:
Beta(θ;α,β)∝θα−1(1−θ)β−1\operatorname{Beta}(\theta ; \alpha, \beta) \propto \theta^{\alpha-1}(1-\theta)^{\beta-1}Beta(θ;α,β)∝θα−1(1−θ)β−1
其中α−1\alpha -1α−1为掷到head
的次数,β−1\beta -1β−1为尝试(tails
)的次数,能拿到的奖励的期望值为E(θ)=αα+βE(\theta)=\frac{\alpha}{\alpha + \beta}E(θ)=α+βα。
获得了θ\thetaθ的先验分布Pr(θ)=Beta(θ;α,β)∝θα−1(1−θ)β−1\operatorname{Pr}(\theta)=\operatorname{Beta}(\theta ; \alpha, \beta) \propto \theta^{\alpha-1}(1-\theta)^{\beta-1}Pr(θ)=Beta(θ;α,β)∝θα−1(1−θ)β−1之后我们就可以计算其后验分布:
Pr(θ∣head)∝Pr(θ)Pr(head∣θ)∝θα−1(1−θ)β−1θ=θ(α+1)−1(1−θ)β−1∝Beta(θ;α+1,β)\begin{aligned} \operatorname{Pr}(\theta | \text {head}) & \propto \operatorname{Pr}(\theta) \quad \operatorname{Pr}(\text {head} | \theta) \\ & \propto \theta^{\alpha-1}(1-\theta)^{\beta-1} \quad \theta \\ &=\theta^{(\alpha+1)-1}(1-\theta)^{\beta-1} \\ & \propto \operatorname{Beta}(\theta ; \alpha+1, \beta) \end{aligned}Pr(θ∣head)∝Pr(θ)Pr(head∣θ)∝θα−1(1−θ)β−1θ=θ(α+1)−1(1−θ)β−1∝Beta(θ;α+1,β)
和
Pr(θ∣tail)∝Pr(θ)Pr(tail∣θ)∝θα−1(1−θ)β−1(1−θ)=θα−1(1−θ)(β+1)−1∝Beta(θ;α,β+1)\begin{aligned} \operatorname{Pr}(\theta | \text {tail}) & \propto \operatorname{Pr}(\theta) \quad \operatorname{Pr}(\text {tail} | \theta) \\ & \propto \theta^{\alpha-1}(1-\theta)^{\beta-1}(1-\theta) \\ &=\theta^{\alpha-1}(1-\theta)^{(\beta+1)-1} \\ & \propto \operatorname{Beta}(\theta ; \alpha, \beta+1) \end{aligned}Pr(θ∣tail)∝Pr(θ)Pr(tail∣θ)∝θα−1(1−θ)β−1(1−θ)=θα−1(1−θ)(β+1)−1∝Beta(θ;α,β+1)
Thompson sampling
当我们能够获得后验分布时,通过采样可以获得每个动作aaa的后验平均奖励:
R1(a),…Rk(a)∼Pr(R(a)∣r1a,…,rna)R_{1}(a), \ldots R_{k}(a) \sim \operatorname{Pr}\left(R(a) | r_{1}^{a}, \ldots, r_{n}^{a}\right)R1(a),…Rk(a)∼Pr(R(a)∣r1a,…,rna)
然后估计经验平均奖励:
R^(a)=1k∑i=1kRi(a)\hat{R}(a)=\frac{1}{k} \sum_{i=1}^{k} R_{i}(a)R^(a)=k1i=1∑kRi(a)
选择动作的时候抽取能获得最大的奖励所对应的那个action
a=argmaxaR^(a)a=argmax_{a}\hat{R}(a)a=argmaxaR^(a) 就可以:
与Greedy Strategy
对比,两者的不同就在于经验平均奖励一个是来自后验分布概率计算出来的R^(a)=1k∑i=1kRi(a)\hat{R}(a)=\frac{1}{k} \sum_{i=1}^{k} R_{i}(a)R^(a)=k1∑i=1kRi(a),一个是基于实际观测所得到的R~=1n∑i=1mria\tilde{R}=\frac{1}{n}\sum_{i=1}^{m}r_{i}^{a}R~=n1∑i=1mria。因此Thompson Sampling
基于后验概率算出来的奖励是具有不确定性的,因此探索程度会比贪婪策略更好,而随着观察数据的增多,模型越来越准确,这种探索也会随之减少。
Contextual Bandits
在很多场合Context
会提供更多的额外信息,比如像个性化推荐系统,Context
会包含用户的年龄,性别,居住地等信息,而这些信息对个性化推荐系统都能起到辅助的作用。
contextual bandits
用数学的方式描述为:
- SSS:状态集合,由一个特征向量描述xS=(x1S,x2S,…,xkS)x^{S}=\left(x_{1}^{S}, x_{2}^{S}, \ldots, x_{k}^{S}\right)xS=(x1S,x2S,…,xkS)
- AAA:动作集合,由一个与每个动作相关的特征向量描述xa=(x1a,x2a,…,xla)x^{a}=\left(x_{1}^{a}, x_{2}^{a}, \ldots, x_{l}^{a}\right)xa=(x1a,x2a,…,xla)。
- 奖励空间 R\mathbb{R}R。
同样的是没有状态转移函数的。而我们要做的是找到一个策略π:xS→a\pi : x^{S}\rightarrow aπ:xS→a,它能够最大化期望奖励E(r∣s,a)=E(r∣xs,xa)E(r | s, a)=E\left(r | \boldsymbol{x}^{s}, \boldsymbol{x}^{a}\right)E(r∣s,a)=E(r∣xs,xa)。为了能够获得奖励函数的模型,可以采用函数近似的方法,比如线性近似R~w(x)=wTx\tilde{R}_{w}(x)=w^{T} xR~w(x)=wTx和非线性近似R~w(x)=neuralNet(x;w)\tilde{R}_{\boldsymbol{w}}(\boldsymbol{x})=neuralNet (\boldsymbol{x} ; \boldsymbol{w})R~w(x)=neuralNet(x;w),其中x=(xS,xa)x=(x^{S},x^{a})x=(xS,xa)。
在线性近似的情况下采用贝叶斯的方法对其进行求解。假设参数w\boldsymbol{w}w的先验分布为高斯分布,即:
pdf(w)=N(w∣0,λ2I)∝exp(−wTw2λ2)p d f(\boldsymbol{w})=N\left(\boldsymbol{w} | 0, \lambda^{2} I\right) \propto \exp \left(-\frac{\boldsymbol{w}^{T} w}{2 \lambda^{2}}\right)pdf(w)=N(w∣0,λ2I)∝exp(−2λ2wTw)
一旦我们知道了参数w\boldsymbol{w}w,我们可以计算奖励的概率分布:
pdf(r∣x,w)=N(r∣wTx,σ2)∝exp(−(r−wTx)22σ2)p d f(r | \boldsymbol{x}, \boldsymbol{w})=N\left(r | \boldsymbol{w}^{T} \boldsymbol{x}, \sigma^{2}\right) \propto \exp \left(-\frac{\left(r-\boldsymbol{w}^{T} \boldsymbol{x}\right)^{2}}{2 \sigma^{2}}\right)pdf(r∣x,w)=N(r∣wTx,σ2)∝exp(−2σ2(r−wTx)2)
基于贝叶斯定理可以计算后验概率求得参数w\boldsymbol{w}w
pdf(w∣r,x)∝pdf(w)Pr(r∣x,w)∝exp(−wTw2λ2)exp(−(r−wTx)22σ2)=N(w∣μ,Σ)\begin{array}{l} p d f(\boldsymbol{w} | r, x) \propto p d f(\boldsymbol{w}) \operatorname{Pr}(r | x, \boldsymbol{w}) \\ \propto \exp \left(-\frac{\boldsymbol{w}^{T} \boldsymbol{w}}{2 \lambda^{2}}\right) \exp \left(-\frac{\left(r-\boldsymbol{w}^{T} x\right)^{2}}{2 \sigma^{2}}\right) \\ =N(\boldsymbol{w} | \mu, \Sigma) \end{array}pdf(w∣r,x)∝pdf(w)Pr(r∣x,w)∝exp(−2λ2wTw)exp(−2σ2(r−wTx)2)=N(w∣μ,Σ)
其中μ=σ−2∑xr\mu=\sigma^{-2}\sum xrμ=σ−2∑xr,Σ=(σ−2xxT+λ−2I)−1\Sigma=\left(\sigma^{-2} x x^{T}+\lambda^{-2} I\right)^{-1}Σ=(σ−2xxT+λ−2I)−1。到此整个的求解框架就差不多完事了。假设我们有一个状态动作对(xS,xa)=x(x^{S},x^{a})=x(xS,xa)=x,我们期望去预测它的奖励rrr,可以采用预测后验概率分布的方式得到:
pdf(r∣x)=∫wN(r∣wTx,σ2)N(w∣μ,Σ)dw=N(r∣σ2xTμ,xTΣx)\begin{aligned} p d f(r | \boldsymbol{x}) &=\int_{\boldsymbol{w}} N\left(r | \boldsymbol{w}^{T} \boldsymbol{x}, \sigma^{2}\right) N(\boldsymbol{w} | \boldsymbol{\mu}, \Sigma) d w \\ &=N\left(r | \sigma^{2} \boldsymbol{x}^{T} \boldsymbol{\mu}, \boldsymbol{x}^{T} \boldsymbol{\Sigma} \boldsymbol{x}\right) \end{aligned}pdf(r∣x)=∫wN(r∣wTx,σ2)N(w∣μ,Σ)dw=N(r∣σ2xTμ,xTΣx)
拿到了奖励分布之后再结合UCB
和Thomson sampling
得到基于线性高斯的UCB
算法和线性高斯的汤普森采样算法。
UCB
:Pr(r<σ2xTμ+cxTΣx)>1−δ\operatorname{Pr}\left(r<\sigma^{2} \boldsymbol{x}^{T} \boldsymbol{\mu}+c \sqrt{\boldsymbol{x}^{T} \boldsymbol{\Sigma} \boldsymbol{x}}\right)>1-\deltaPr(r<σ2xTμ+cxTΣx)>1−δ,其中c=1+ln(2/δ)/2c=1+\sqrt{\ln (2 / \delta) / 2}c=1+ln(2/δ)/2。
Thomson sampling
:r~∼N(r∣σ2xTμ,xTΣx)\tilde{r} \sim N\left(r | \sigma^{2} \boldsymbol{x}^{T} \boldsymbol{\mu}, \boldsymbol{x}^{T} \boldsymbol{\Sigma} \boldsymbol{x}\right)r~∼N(r∣σ2xTμ,xTΣx)。
求通俗解释下bandit老虎机是个什么东西?相关推荐
- 通俗解释下聚簇索引和非聚簇索引
今天我们来聊一聊关于 聚簇索引和非聚簇索引的问题: 刚开始学数据库SQL的时候,就知道有主键啊(Primary-key),外键啊(Foreign-key)啥的,连个表查询就已经不清楚是要on 那几个字 ...
- perplexity 衡量指标_求通俗解释NLP里的perplexity是什么?
前面的回答都很优秀,但我想基于我的理解做个补充. 困惑度 Perplexity 是衡量语言模型好坏的指标,为了更好地理解其意义,首先有必要回顾熵的概念.根据信息论与编码的知识,我们知道 熵代表着根据信 ...
- Event用计算机语言,求高人解释下一段计算机语言。
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 MOXTVersion: 21 SkinModelPath: Models\NPCs\npc\城战相关\投石车\投石车.SMD OrgColor: fff ...
- matlab加停顿,求高手解释下这段程序,实在是搞不懂了,要死的节奏了。。。。...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 r=0.06 for k=0:3 whr(k+1,:)=Cwr(1+size(Cwr,2)/4+k*size(Cwr,2)/16:... size(Cwr ...
- java反射通俗解释,谁来帮用通俗易懂的语言解释下java的反射机制
谁来帮用通俗易懂的语言解释下java的反射机制以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 谁来帮用通俗易懂的语言解释 ...
- 通俗地解释下密码学中的归约证明
本文首发于本人的:能否通俗地解释下密码学中的归约证明? - ChainingBlocks的回答 - 知乎 https://www.zhihu.com/question/49441102/answer/ ...
- 循环神经网络(RNN)原理通俗解释
循环神经网络(RNN)原理通俗解释 1.RNN怎么来的? 2.RNN的网络结构及原理 3.RNN的改进1:双向RNN 4.RNN的改进2:深层双向RNN 4.1 Pyramidal RNN 5.RNN ...
- Fleury (弗罗莱) 算法通俗解释
Fleury (弗罗莱) 算法通俗解释 1.定义 2.举例说明 图2为连通图G,现利用Fleury算法求它的欧拉通路.(注意区分:欧拉通路.欧拉回路) 其中一种欧拉通路如下:4 5 8 7 6 8 9 ...
- Wasserstein metric的通俗解释
Wasserstein metric的通俗解释 关注他 166 人赞同了该文章 本文收录在无痛的机器学习第二季目录. Wasserstein GAN可以算是GAN界的一大突破了,有关它的介绍和使用心 ...
最新文章
- 【 Notes 】Best linear unbiased estimator(BLUE) approach for time-of-arrival based localisation
- WPF中的动画——(六)演示图板
- mongodb配置windows服务启动
- Java基础 —— 异常
- put多文件上传linux,linux 上传lftp 服务器
- 搜索提示的实现(仿百度):附源码和在线demo
- python分行打印list_python怎么打印list-问答-阿里云开发者社区-阿里云
- python海龟作图好看图案_python海龟绘图,其实python也很强大,这些技能你知道吗?...
- centos php ioncube_如何在CentOS 7中安装ionCube Loader
- 利用clamav为程序添加查毒功能
- c语言sql数据库大作业,c语言连接sql数据库.docx
- c c++实现restful api服务 c c++实现http服务
- Photoshop CC 2019快速选择工具的抠图
- 规则引擎在数据治理平台的实践
- 华为设备静态路由配置
- 夏洛克和他的女朋友(AcWing 1293)
- 英勇青铜5基金个人策略
- 无忌的flag---五月底之前完成
- 小米3 android8,小米8 Miui10.3 最新稳定版(10.3.6.0 Android 9.0)稳定版 快过闪电 AI加持 高级工具箱 黑域 精简 流畅 省电 实用...
- FTP协议 Java应用
热门文章
- autoware lidar_localizer包下的ndt_matching节点的学习
- 《矩阵理论》大萌课程笔记 - 线性空间与子空间
- 考研英语 - word-list-9
- 源生js封装ajax
- 四、jOOQ 系列教程 - Record 详解
- 百度音乐接口-——可以根据这做一个在线音乐播放器哦
- Lombok 注解说明
- 音视频进阶教程|实现直播SEI补充增强信息
- 一分钟学会看k线图_一分钟学会看k线图 炒股新手入门看图教程
- magic4.0什么时候升级鸿蒙,科技知识:magic4.0什么时候更新 magic4.0更新时间介绍...