文章目录

  • 问题描述
  • Uniform exploration
    • Uniform exploration的Bound (k=2)
    • Uniform exploration的Bound (K>2)
  • Adaptive exploration
    • Successive Elimination algorithm(k=2)
    • Successive Elimination algorithm(k >2)
    • Optimism under uncertainty

问题描述

  问题描述如下:

  算法的目标是最大化累计奖励,基于三个假设:

  1. 奖励的设定遵循bandit feedback。也就是说算法只能观测到所选择动作的奖励。
  2. 对于每个动作aaa,都有一个奖励分布Da\mathcal{D}_{a}Da​与之对应,每次这个动作aaa被选中,反馈的奖励将会从这个分布中进行采样,并返回给算法。
  3. 奖励有界 [0,1][0,1][0,1]。

  往往在实际过程中更多考虑奖励均值向量(mean reward vector) μ∈[0,1]K\mu \in [0,1]^{K}μ∈[0,1]K,其中μ(a)=E[Da]\mu(a)=\mathbb{E}\left[\mathcal{D}_{a}\right]μ(a)=E[Da​]。当然最简单的就是伯努利分布(Bernoulli distribution),或者称之为0-1分布。

  所有的arms集合定义为A\mathcal{A}A,最优均值奖励定义为:μ∗:=max⁡a∈Aμ(a)\mu^{*}:=\max _{a \in \mathcal{A}} \mu(a)μ∗:=maxa∈A​μ(a)。任意一个动作均值奖励与最好的动作均值奖励的差表示为:Δ(a):=μ∗−μ(a)\Delta(a):=\mu^{*}-\mu(a)Δ(a):=μ∗−μ(a)。

  悔憾值(Regret):可用于衡量算法表现好坏的一个指标。就是用假设能拿到的最多的累计奖励减去已经拿到的累计奖励。定义为如下形式:

R(T)=μ∗⋅T−∑t=1Tμ(at)R(T)=\mu^{*} \cdot T-\sum_{t=1}^{T} \mu\left(a_{t}\right)R(T)=μ∗⋅T−t=1∑T​μ(at​)

  被称作在 TTT 回合(round)的悔憾值。由于动作ata_{t}at​经常会变,是个随机变量,因此R(T)R(T)R(T)也是个随机变量,我们通常考虑expected regret E[R(T)]\mathbb{E}[R(T)]E[R(T)]。

  备注:术语:由于悔憾值的定义值整个回合(sum all rounds),所以有时我们也将其称之为cumulative regret。有时为了区别R(T)R(T)R(T) 和 E[R(T)]\mathbb{E}[R(T)]E[R(T)],分别将其称为realized regretexpected regret。文献中R(T)R(T)R(T)的值有时候也被称为pseudo-regret

Uniform exploration

  那我们如何来求解上述的这样一个问题呢?一种简单地办法就是先随机选择,之后依据随机选则得到的结果确定哪一个arms具有较高的奖励分布,通常也将这种算法称之为Explore-first算法。

  定义每个动作aaa的平均奖励为μˉ(a)\bar{\mu}(a)μˉ​(a),期望平均奖励能够尽可能接近真实的期望奖励(true expected rewards)。也就是∣μˉ(a)−μ(a)∣|\bar{\mu}(a)-\mu(a)|∣μˉ​(a)−μ(a)∣的值尽可能小。定义置信半径(confidence radius) r(a)=2logTNr(a)=\sqrt{\frac{2logT}{N}}r(a)=N2logT​​ (T表示the time horizon),使用霍夫丁不等式Hoeffding inequality可以得到:

Pr⁡{∣μˉ(a)−μ(a)∣≤r(a)}≥1−2T4\operatorname{Pr}\{|\bar{\mu}(a)-\mu(a)| \leq r(a)\} \geq 1-\frac{2}{T^{4}}Pr{∣μˉ​(a)−μ(a)∣≤r(a)}≥1−T42​

  因此可以看出来,奖励平均与真实期望偏离会比较小。上述公式可直接由下面不等式推导得到:

  霍夫丁不等式(英语:Hoeffding’s inequality)适用于有界的随机变量。设有两两独立的一系列随机变量 X1,…,Xn⁣{\displaystyle X_{1},\dots ,X_{n}\!}X1​,…,Xn​。假设对所有的 1≤i≤n{\displaystyle 1\leq i\leq n}1≤i≤n,XiXi{\displaystyle X_{i}} X_{i}Xi​Xi​都是几乎有界的变量,即满足:P(Xi∈[ai,bi])=1.⁣{\displaystyle \mathbb {P} (X_{i}\in [a_{i},b_{i}])=1.\!}P(Xi​∈[ai​,bi​])=1.。

  那么这nnn个随机变量的经验期望:

X‾=X1+⋯+Xnn{\displaystyle {\overline {X}}={\frac {X_{1}+\cdots +X_{n}}{n}}}X=nX1​+⋯+Xn​​

  满足以下的不等式:

P(X‾−E[X‾]≥t)≤exp⁡(−2t2n2∑i=1n(bi−ai)2),⁣{\displaystyle \mathbb {P} ({\overline {X}}-\mathbb {E} [{\overline {X}}]\geq t)\leq \exp \left(-{\frac {2t^{2}n^{2}}{\sum _{i=1}^{n}(b_{i}-a_{i})^{2}}}\right),\!} P(X−E[X]≥t)≤exp(−∑i=1n​(bi​−ai​)22t2n2​),

P(∣X‾−E[X‾]∣≥t)≤2exp⁡(−2t2n2∑i=1n(bi−ai)2),⁣{\displaystyle \mathbb {P} (|{\overline {X}}-\mathbb {E} [{\overline {X}}]|\geq t)\leq 2\exp \left(-{\frac {2t^{2}n^{2}}{\sum _{i=1}^{n}(b_{i}-a_{i})^{2}}}\right),\!}P(∣X−E[X]∣≥t)≤2exp(−∑i=1n​(bi​−ai​)22t2n2​),

  其证明可参考链接如下:http://web.eecs.umich.edu/~cscott/past_courses/eecs598w14/notes/03_hoeffding.pdf

  定义clean event,(我的理解是:T4T^{4}T4 比较大,上述概率接近于1)。

Uniform exploration的Bound (k=2)

  假定一种情况K=2K=2K=2 arms,考虑clean event的情况,best arm是 a∗a^{*}a∗,如果算法选择了其它 arma≠a∗a \neq a^{*}a​=a∗,那一定是因为平均奖励比a∗a^{*}a∗要更好,或者说 uˉ(a)>μˉ(a∗)\bar{u}(a) > \bar{\mu}(a^{*})uˉ(a)>μˉ​(a∗)。由于是clean event,所以有:

μ(a)+r(a)≥μˉ(a)>μˉ(a∗)≥μ(a∗)−r(a∗)\mu(a)+r(a) \geq \bar{\mu}(a)>\bar{\mu}\left(a^{*}\right) \geq \mu\left(a^{*}\right)-r\left(a^{*}\right)μ(a)+r(a)≥μˉ​(a)>μˉ​(a∗)≥μ(a∗)−r(a∗)

  重新整理一下,可得:

μ(a∗)−μ(a)≤r(a)+r(a∗)=O(log⁡TN)\mu\left(a^{*}\right)-\mu(a) \leq r(a)+r\left(a^{*}\right)=O(\sqrt{\frac{\log T}{N}})μ(a∗)−μ(a)≤r(a)+r(a∗)=O(NlogT​​)

  因此如果每个回合选择利用(exploitation),最多会有O(log⁡TN)O(\sqrt{\frac{\log T}{N}})O(NlogT​​)级别的后悔程度,选择探索(exploration)的话,最大后悔程度为1。因此对于两个arm的情况,对于每个arm来说,可以将其分为两部分,NNN步的exploration和 T−2NT-2NT−2N步的exploitation。因此其regretupper bound可表示为:

R(T)≤N+O(log⁡TN×(T−2N))≤N+O(log⁡TN×T)\begin{aligned} R(T) & \leq N+O(\sqrt{\frac{\log T}{N}} \times(T-2 N)) \\ & \leq N+O(\sqrt{\frac{\log T}{N}} \times T) \end{aligned}R(T)​≤N+O(NlogT​​×(T−2N))≤N+O(NlogT​​×T)​

  因此我们可以改变 NNN 使得上述公式右端项尽可能小,这样regret的上界也就会随之变小。那如何来求极值呢?发现一项单调递增,一项单调递减,令其两项相等即可得到N=T2/3(log⁡T)1/3N = T^{2 / 3}(\log T)^{1 / 3}N=T2/3(logT)1/3 (NNN大概要取到T2/3T^{2/3}T2/3,耗时较大)。有:

R(T)≤O(T2/3(log⁡T)1/3)R(T) \leq O\left(T^{2 / 3}(\log T)^{1 / 3}\right)R(T)≤O(T2/3(logT)1/3)

  为了证明理论的完整性,我们现在考虑一下bad event的情况,其发生概率(1/T41/T^{4}1/T4),因此可以忽略不记,如下所示:

E[R(T)]=E[R(T)∣clean event ]×Pr⁡[clean event ]+E[R(T)∣bad event ]×Pr⁡[bad event ]≤E[R(T)∣clean event ]+T×O(T−4)≤O(log⁡T×T2/3)\begin{aligned} \mathbb{E}[R(T)] &=\mathbb{E}[R(T) | \text { clean event }] \times \operatorname{Pr}[\text { clean event }]+\mathbb{E}[R(T) | \text { bad event }] \times \operatorname{Pr}[\text { bad event }] \\ & \leq \mathbb{E}[R(T) | \text { clean event }]+T \times O\left(T^{-4}\right) \\ & \leq O\left(\sqrt{\log T} \times T^{2 / 3}\right) \end{aligned}E[R(T)]​=E[R(T)∣ clean event ]×Pr[ clean event ]+E[R(T)∣ bad event ]×Pr[ bad event ]≤E[R(T)∣ clean event ]+T×O(T−4)≤O(logT​×T2/3)​

Uniform exploration的Bound (K>2)

  更进一步,证明 K>2K > 2K>2 的情况,现在的upper-bounded如下所示:R(T)≤NK+O(log⁡TN×T)\begin{aligned} R(T) \leq NK+O(\sqrt{\frac{\log T}{N}} \times T) \end{aligned}R(T)≤NK+O(NlogT​​×T)​。同理计算此时N=(T/K)2/3O(log⁡T)1/3N = (T/K)^{2 / 3}O(\log T)^{1 / 3}N=(T/K)2/3O(logT)1/3。

Theorem 1.3. Explore-first achieves regret E[R(T)]≤T2/3×O(Klog⁡T)1/3\mathbb{E}[R(T)] \leq T^{2 / 3} \times O(K \log T)^{1 / 3}E[R(T)]≤T2/3×O(KlogT)1/3。

  Explore-first的方法性能损失比较大,由此有epsilon-greedy算法:

  如果假设探索的概率(exploration probability ) ϵt∼t−1/3\epsilon_{t} \sim t^{-1 / 3}ϵt​∼t−1/3,此时探索的阶数是t2/3t^{2/3}t2/3,会和Explore-first探索的阶次一样。

Adaptive exploration

  exploration-firstepsilon-greedy都不会说依据历史的奖励反馈信息来自适应调整贪婪策略,这一节主要来对比一下二者。一个很自然的想法是当我们发现了一个好的arm,或者说能获得更多奖励的arm,我们就将之前的抛弃,选择这个更好的arm。还是考虑K=2K=2K=2的情况,那如何定义一个arm的好坏就成了问题的关键。

  ttt 是回合数,nt(a)n_{t}(a)nt​(a) 为arm aaa在ttt round内被选中的次数,uˉt(a)\bar{u}_{t}(a)uˉt​(a) 是arm a到目前ttt round 的平均奖励,基于Hoeffding Inequality有:

Pr⁡[∣μˉt(a)−μ(a)∣≤rt(a)]≥1−2T4\operatorname{Pr}\left[\left|\bar{\mu}_{t}(a)-\mu(a)\right| \leq r_{t}(a)\right] \geq 1-\frac{2}{T^{4}}Pr[∣μˉ​t​(a)−μ(a)∣≤rt​(a)]≥1−T42​

  其中rt(a)=2logTnt(a)r_{t}(a) = \sqrt{\frac{2logT}{n_{t(a)}}}rt​(a)=nt(a)​2logT​​,被称作confidence radius。ntn_{t}nt​可能会基于arm a过去所获得的奖励信息,因此arm a上的采样并不需要独立分布。

  对每个arm a,想象有一个reward tape:是一个1×T1 \times T1×T的表格,其中的每个cell独立地从Da\mathcal{D}_{a}Da​中采样,如下图所示:

  第 jjj个格子储存我们第 jjj 次选择这个arm所观察到的reward,记为vj(a)v_{j}(a)vj​(a)。同样,记 vˉj(a)\bar{v}_{j}(a)vˉj​(a)为前j个格子的平均值。基于Hoeffding Inequality有:

∀jPr⁡(∣vˉj(a)−μ(a)∣≤rt(a))≥1−2T4\forall j \quad \operatorname{Pr}\left(\left|\bar{v}_{j}(a)-\mu(a)\right| \leq r_{t}(a)\right) \geq 1-\frac{2}{T^{4}}∀jPr(∣vˉj​(a)−μ(a)∣≤rt​(a))≥1−T42​

  再将所有的arm考虑进来,有:

  上述公式(1.6)其实是clean event的一个分析。由此可以得到在roundttt下arm aaa 的upper/lower confidence bounds

UCBt(a)=μˉt(a)+rt(a)LCBt(a)=μˉt(a)−rt(a)\begin{array}{l} \mathrm{UCB}_{t}(a)=\bar{\mu}_{t}(a)+r_{t}(a) \\ \mathrm{LCB}_{t}(a)=\bar{\mu}_{t}(a)-r_{t}(a) \end{array}UCBt​(a)=μˉ​t​(a)+rt​(a)LCBt​(a)=μˉ​t​(a)−rt​(a)​

  [LCBt(a);UCBt(a)][\mathrm{LCB}_{t}(a); \mathrm{UCB}_{t}(a)][LCBt​(a);UCBt​(a)]区间被称作置信区间(confidence interval)。知道了这样一个区间就相当于知道了一个arm期望奖励大概的范围,当某个armUCB比另外一个armLCB还要低的时候,就可以抛弃这个arm了,也就完成了对arm好坏的一个定义。

Successive Elimination algorithm(k=2)

  基于上述思想,介绍Successive Elimination算法。

  在假定clean event的情况下,产生一个disqualified(不合格)的arm,会累计多少regret

  当ttt到达了last round,还没有到达终止条件,也就是两个arms的置信间隔具有重叠,有:

Δ:=∣μ(a)−μ(a′)∣≤2(rt(a)+rt(a′))\Delta:=\left|\mu(a)-\mu\left(a^{\prime}\right)\right| \leq 2\left(r_{t}(a)+r_{t}\left(a^{\prime}\right)\right)Δ:=∣μ(a)−μ(a′)∣≤2(rt​(a)+rt​(a′))

  由于算法开始是交替选择两个arm,因此有nt(a)=t2n_{t}(a)=\frac{t}{2}nt​(a)=2t​,可以得到:

Δ≤2(rt(a)+rt(a′))≤42log⁡T⌊t/2⌋=O(log⁡Tt)\Delta \leq 2\left(r_{t}(a)+r_{t}\left(a^{\prime}\right)\right) \leq 4 \sqrt{\frac{2 \log T}{\lfloor t / 2\rfloor}}=O(\sqrt{\frac{\log T}{t}})Δ≤2(rt​(a)+rt​(a′))≤4⌊t/2⌋2logT​​=O(tlogT​​)

  直到round ttt 整个的累计regret可表示为:

R(t)≤Δ×t≤O(t⋅log⁡Tt)=O(tlog⁡T)R(t) \leq \Delta \times t \leq O(t \cdot \sqrt{\frac{\log T}{t}})=O(\sqrt{t \log T})R(t)≤Δ×t≤O(t⋅tlogT​​)=O(tlogT​)

  可以发现这种算法的regret boundt\sqrt{t}t​要强于之前的贪心算法T2/3T^{2/3}T2/3了。为了分析更加完整,考虑bad event的情况如下所示:

Successive Elimination algorithm(k >2)

  将其扩展到K>2K >2K>2的情形,得到Successive Elimination算法:

  现在对这个算法做一个简要分析,K=2K=2K=2 armbad event的情况仍是不考虑。假定最优arm为a∗a^{*}a∗,对于任意一个armaaa有μ(a)<μ(a∗)\mu(a) < \mu(a^{*})μ(a)<μ(a∗)。如果我们没有抛弃这个arm,那么其置信区间和最优的arm的置信区间是重合的:

Δ(a):=μ(a∗)−μ(a)≤2(rt(a∗)+rt(a))=O(rt(a))\Delta(a):=\mu\left(a^{*}\right)-\mu(a) \leq 2\left(r_{t}\left(a^{*}\right)+r_{t}(a)\right)=O\left(r_{t}(a)\right)Δ(a):=μ(a∗)−μ(a)≤2(rt​(a∗)+rt​(a))=O(rt​(a))

  即armaaa的mean reward和最好的mean reward的差距。最后一个等式能够成立的原因在于nt(a)n_{t}(a)nt​(a)和nt(a∗)n_{t}(a^{*})nt​(a∗)其最多差1(算法是交替选择action)。由于armaaa 没有play过,因此nt(a)=nT(a)n_{t}(a)=n_{T}(a)nt​(a)=nT​(a),因此有rt(a)=rT(a)r_{t}(a)=r_{T}(a)rt​(a)=rT​(a) ,可以得到:

  上述公式的直观理解就是某个arm被选择了很多次,却没有被抛弃,就说明这个arm不会太差。之后的分析都基于这个公式。

  arm aaa在roundttt处的regret定义为R(t;a)R(t;a)R(t;a),Δ(a)\Delta(a)Δ(a)表示为对每个playedarm,依据公式(1.7)得到以下上界:

R(t;a)=nt(a)⋅Δ(a)≤nt(a)⋅O(log⁡T/nt(a))=O(nt(a)log⁡T)R(t ; a)=n_{t}(a) \cdot \Delta(a) \leq n_{t}(a) \cdot O(\sqrt{\log T / n_{t}(a)})=O(\sqrt{n_{t}(a) \log T})R(t;a)=nt​(a)⋅Δ(a)≤nt​(a)⋅O(logT/nt​(a)​)=O(nt​(a)logT​)


  将上述等式的关系带入公式(1.8)得到

R(t)≤O(Ktlog⁡T)R(t) \leq O(\sqrt{K t \log T})R(t)≤O(KtlogT​)

  基于公式(1.7)可以得到另一个regret bound,将公式(1.7)稍作变形可得:nT(a)≤O(log⁡T[Δ(a)]2)n_{T}(a) \leq O\left(\frac{\log T}{[\Delta(a)]^{2}}\right)nT​(a)≤O([Δ(a)]2logT​),这个公式的理解就是一个很差的arm不会被played很多次。对每个arm a∈Aa \in \mathcal{A}a∈A,有:

R(T;a)=Δ(a)⋅nT(a)≤Δ(a)⋅O(log⁡T[Δ(a)]2)=O(log⁡TΔ(a))R(T ; a)=\Delta(a) \cdot n_{T}(a) \leq \Delta(a) \cdot O\left(\frac{\log T}{[\Delta(a)]^{2}}\right)=O\left(\frac{\log T}{\Delta(a)}\right)R(T;a)=Δ(a)⋅nT​(a)≤Δ(a)⋅O([Δ(a)]2logT​)=O(Δ(a)logT​)

  对所有的arm a∈A+a \in \mathcal{A^{+}}a∈A+,有:

R(T)≤O(log⁡T)[∑a∈A+1Δ(a)]R(T) \leq O(\log T)\left[\sum_{a \in \mathcal{A}^{+}} \frac{1}{\Delta(a)}\right]R(T)≤O(logT)[a∈A+∑​Δ(a)1​]

  因此得到了另一个下界:

  可以看到adaptive explorationnon-adaptive exploration相比较,adaptive exploration是一个对数悔憾界(logarithmic regret bounds)。

Optimism under uncertainty

  考虑另一种自适应探索(adaptive exploration)的方法,不确定性下最优求解(optimism under uncertainty),假设每个arm都尽可能地好,选择其中最优的那个,这个算法叫做UCB1

  Arm被选中是由于有大的UCB值,而其由两部分组成,一个是uˉt(a)\bar{u}_{t}(a)uˉt​(a)很大,说明其reward很大,另一个是confidence radius rt(a)r_{t}(a)rt​(a)很大,说明其值得探索,或者说探索不充分。将其组合在UCB公式中能够平衡其二者的关系。

  UCB类算法相比贪心算法最大的优势,它的每步都在随着获得的reward反馈动态调整自己的策略,这个特性我们将在之后的RL算法中更加频繁的看到。

多臂老虎机导论(二)Stochastic Bandits相关推荐

  1. 【科普】强化学习之多臂老虎机问题(bandit算法:softmax,random,UCB)

    本博客上的文章分为两类:一类是科普性文章,以通俗易懂的语言风格介绍专业性的概念及其应用场景(公式极少或没有),适合入门阶段.另一类是专业性文章,在科普阶段上做出详细的专业性数学推导,深刻理解其概念的内 ...

  2. 不只是A/B测试:多臂老虎机赌徒实验

    点击上方"AI公园",关注公众号,选择加"星标"或"置顶" 作者:Shaw Lu 编译:ronghuaiyang 导读 学习使用Google ...

  3. 深度学习核心技术精讲100篇(三)-层次自适应的多臂老虎机决策算法 ( HATCH )在滴滴中的应用

    前言 需要源码的小伙伴参见: Contextual Bandits 算法在推荐场景中的应用源码 https://download.csdn.net/download/wenyusuran/155784 ...

  4. 强化学习笔记:多臂老虎机问题(7)--Gradient Bandit Algorithm

    目录 0. 前言 1. 算法原理 2. Python仿真 2.1 函数改造 2.2 softmax() 2.3 改造后的k_armed_bandit_one_run() 2.4 对比仿真 2.5 一点 ...

  5. 【强化学习】多臂老虎机——E_greedy、UCB、Gradient Bandit 算法 代码实现

    多臂老虎机 import numpy as np import matplotlib.pyplot as pltclass E_greedy:def __init__(self,arm_num=10, ...

  6. Multi-Armed Bandit--基于时变多臂老虎机的在线上下文感知推荐

    Online Context-Aware Recommendation with Time Varying Multi-Armed Bandit 基于时变多臂老虎机的在线上下文感知推荐 摘要 为了预测 ...

  7. 强化学习的学习之路(十)_2021-01-10:K臂老虎机介绍及其Python实现

    作为一个新手,写这个强化学习-基础知识专栏是想和大家分享一下自己学习强化学习的学习历程,希望对大家能有所帮助.这个系列后面会不断更新,希望自己在2021年能保证平均每日一更的更新速度,主要是介绍强化学 ...

  8. 从多臂老虎机开始学习强化学习中的探索与利用

    从多臂老虎机开始学习强化学习中的探索与利用 \quad 目录 从多臂老虎机开始学习强化学习中的探索与利用 多臂老虎机问题 形式化描述 估计期望奖励 代码实现 策略中的探索与利用 ϵ\epsilonϵ- ...

  9. 多臂老虎机(Multi-armed bandit problem)

    我们会遇到很多选择的场景,如:上哪所大学,学什么专业,去哪家公司,等等.这些选择问题都会让选择困难症患者头大.那么,有什么科学的办法来解决这些问题呢?答案是:有!而且是非常科学的办法,那就是多臂老虎机 ...

  10. 强化学习——day12 多臂老虎机问题MAB

    在多臂老虎机(multi-armed bandit,MAB)问题(见图 2-1)中,有一个拥有 根拉杆的老虎机,拉动每一根拉杆都对应一个关于奖励的概率分布 .我们每次拉动其中一根拉杆,就可以从该拉杆对 ...

最新文章

  1. 香港大学工程学院计算机教授,香港大学郑振刚教授访问软件园校区
  2. 洛谷P1090 合并果子
  3. 前端页面闪烁的问题解决方案
  4. JAVA_WEB--jsp概述
  5. project 打印的时候上面的表格和下面的图例中间有个很大的空白,这块东西怎么能去掉呢?
  6. 【生活】我的2019年度总结
  7. 生活随笔:师弟,加油
  8. [RK3399][Android7.1] adb remount失败
  9. JavaScript 教程 (详细 全面)
  10. 虚拟打印机 android版,Doro PDF Writer
  11. QNX系统将C/C++代码编译为lib***.so文件
  12. wed基础和http
  13. 这三年,一路走来,劈荆斩棘 – Vol 1
  14. USIM卡与SIM的区别
  15. java 翻译 go语言_【翻译】go是面向对象语言吗?
  16. QQ音乐酷狗音乐竞品分析
  17. 儿童python编程app_Python编程狮app下载
  18. 深度学习篇之数据集划分方法-附代码python详细注释
  19. 什么是pageRank
  20. PCL 实现 SAC_IA 算法原理源码解析

热门文章

  1. linux下的工作目录切换实现
  2. 服务器(Windows系统)自建蚂蚁(leanote)笔记超详细步骤(包含数据备份和数据还原)
  3. 服务器运维文章大合集
  4. docker 安装与部署
  5. 使用sublime实现python代码补全
  6. HDOJ--2092--整数解(水题)
  7. NYOJ--22--素数求和问题
  8. 小、巧、快消息队列组件beanstalkd
  9. Python——Selenium Chrome Driver配置
  10. HashMap简单源码及多线程下的死循环