简单易学的机器学习算法——受限玻尔兹曼机RBM
受限玻尔兹曼机(Restricted Boltzmann Machine, RBM)是一种基于能量模型的神经网络模型,在Hinton提出针对其的训练算法(对比分歧算法)后,RBM得到了更多的关注,利用RBM的堆叠可以构造出深层的神经网络模型——深度信念网(Deep Belief Net, DBN)。下面简单介绍二值型RBM的主要内容。
一、RBM的网络结构
RBM的网络结构如下图所示:
RBM中包括两层,即:
- 可见层(visible layer),图上的v\mathbf{v}v
- 隐藏层(hidden layer),图上的h\mathbf{h}h
由上图可知,在同一层中,如上图中的可见层,在可见层中,其节点之间是没有连接的,而在层与层之间,其节点是全连接的,这是RBM最重要的结构特征:层内无连接,层间全连接
。
在RBM的模型中,有如下的性质:
当给定可见层神经元的状态时。各隐藏层神经元的之间是否激活是条件独立的;反之也同样成立。
下面给出RBM模型的数学化定义:
如图:
(图片来自参考文献1)
假设可见层的神经元的个数为nvn_vnv,隐藏层的神经元的个数为nhn_hnh,v\mathbf{v}v表示的是可见层神经元的状态,v=(v1,v2,⋯,vnv)T\mathbf{v}=\left ( v_1,v_2,\cdots ,v_{n_v} \right )^Tv=(v1,v2,⋯,vnv)T。h\mathbf{h}h表示的是隐藏层神经元的状态,h=(h1,h2,⋯,hnh)T\mathbf{h}=\left ( h_1,h_2,\cdots ,h_{n_h} \right )^Th=(h1,h2,⋯,hnh)T。a\mathbf{a}a表示的是可见层神经元的偏置,a=(a1,a2,⋯,anv)T∈Rnv\mathbf{a}=\left ( a_1,a_2,\cdots ,a_{n_v} \right )^T\in \mathbb{R}^{n_v}a=(a1,a2,⋯,anv)T∈Rnv。b\mathbf{b}b表示的是隐藏层神经元的偏置,b=(b1,b2,⋯,bnh)T∈Rnh\mathbf{b}=\left ( b_1,b_2,\cdots ,b_{n_h} \right )^T\in \mathbb{R}^{n_h}b=(b1,b2,⋯,bnh)T∈Rnh。W=(wi,j)∈Rnh×nvW=\left ( w_{i,j} \right )\in \mathbb{R}^{n_h\times n_v}W=(wi,j)∈Rnh×nv表示的是隐藏层与可见层之间的连接权重。同时,我们记θ=(W,a,b)\theta =\left ( W,\mathbf{a},\mathbf{b} \right )θ=(W,a,b)。
二、RBM模型的计算
2.1、能量函数
对于一组给定的状态(v,h)\left ( \mathbf{v},\mathbf{h} \right )(v,h),定义如下的能量函数:
Eθ(v,h)=−∑i=1nvaivi−∑j=1nhbjhj−∑i=1nv∑j=1nhhjwj,iviE_\theta \left ( \mathbf{v},\mathbf{h} \right )=-\sum_{i=1}^{n_v}a_iv_i-\sum_{j=1}^{n_h}b_jh_j-\sum_{i=1}^{n_v}\sum_{j=1}^{n_h}h_jw_{j,i}v_iEθ(v,h)=−i=1∑nvaivi−j=1∑nhbjhj−i=1∑nvj=1∑nhhjwj,ivi
利用该能量公式,可以定义如下的联合概率分布:
Pθ(v,h)=1Zθe−Eθ(v,h)P_\theta \left ( \mathbf{v},\mathbf{h} \right )=\frac{1}{Z_\theta }e^{-E_\theta \left ( \mathbf{v},\mathbf{h} \right )}Pθ(v,h)=Zθ1e−Eθ(v,h)
其中:
Zθ=∑v,he−Eθ(v,h)Z_\theta =\sum_{\mathbf{v},\mathbf{h}}e^{-E_\theta \left ( \mathbf{v},\mathbf{h} \right )}Zθ=v,h∑e−Eθ(v,h)
称为归一化因子。
当有了联合概率分布,我们便可以定义边缘概率分布,即:
Pθ(v)=∑hPθ(v,h)=1Zθ∑he−Eθ(v,h)P_\theta \left ( \mathbf{v} \right )=\sum_{\mathbf{h}}P_\theta \left ( \mathbf{v},\mathbf{h} \right )=\frac{1}{Z_\theta }\sum_{\mathbf{h}}e^{-E_\theta \left ( \mathbf{v},\mathbf{h} \right )}Pθ(v)=h∑Pθ(v,h)=Zθ1h∑e−Eθ(v,h)
Pθ(h)=∑vPθ(v,h)=1Zθ∑ve−Eθ(v,h)P_\theta \left ( \mathbf{h} \right )=\sum_{\mathbf{v}}P_\theta \left ( \mathbf{v},\mathbf{h} \right )=\frac{1}{Z_\theta }\sum_{\mathbf{v}}e^{-E_\theta \left ( \mathbf{v},\mathbf{h} \right )}Pθ(h)=v∑Pθ(v,h)=Zθ1v∑e−Eθ(v,h)
2.2、激活概率
有了上述的联合概率分布以及边缘概率分布,我们需要知道当给定可见层的状态时,隐藏层上的某一个神经元被激活的概率,即P(hk=1∣v)P\left ( h_k=1\mid \mathbf{v} \right )P(hk=1∣v),或者当给定了隐藏层的状态时,可见层上的某一神经元被激活的概率,即P(vk=1∣h)P\left ( v_k=1\mid \mathbf{h} \right )P(vk=1∣h)。
首先定义如下的一些标记:
h−k=Δ(h1,h2,⋯,hk−1,hk+1,⋯,hnh)T\mathbf{h}_{-k}\overset{\Delta }{=}\left ( h_1,h_2,\cdots ,h_{k-1},h_{k+1},\cdots ,h_{n_h} \right )^Th−k=Δ(h1,h2,⋯,hk−1,hk+1,⋯,hnh)T
上式表示的是在h\mathbf{h}h中去除了分量hkh_khk后得到的向量。
αk(v)=Δbk+∑i=1nvwk,ivi\alpha _k\left ( \mathbf{v} \right )\overset{\Delta }{=}b_k+\sum_{i=1}^{n_v}w_{k,i}v_iαk(v)=Δbk+i=1∑nvwk,ivi
β(v,h−k)=Δ∑i=1nvaivi+∑j=1,j≠knhbjhj+∑i=1nv∑j=1,j≠knhhjwj,ivi\beta \left ( \mathbf{v}, \mathbf{h}_{-k} \right )\overset{\Delta }{=}\sum_{i=1}^{n_v}a_iv_i+\sum_{j=1,j\neq k}^{n_h}b_jh_j+\sum_{i=1}^{n_v}\sum_{j=1,j\neq k}^{n_h}h_jw_{j,i}v_iβ(v,h−k)=Δi=1∑nvaivi+j=1,j=k∑nhbjhj+i=1∑nvj=1,j=k∑nhhjwj,ivi
有了如上的一些公式,我们可以得到能量公式的如下表示方法:
E(v,h)=−β(v,h−k)−hkαk(v)E\left ( \mathbf{v}, \mathbf{h} \right )=-\beta \left ( \mathbf{v}, \mathbf{h}_{-k} \right )-h_k\alpha _k\left ( \mathbf{v} \right )E(v,h)=−β(v,h−k)−hkαk(v)
那么,当给定可见层的状态时,隐藏层上的某一个神经元被激活的概率P(hk=1∣v)P\left ( h_k=1\mid \mathbf{v} \right )P(hk=1∣v)为:
KaTeX parse error: No such environment: align* at position 7: \begin{̲a̲l̲i̲g̲n̲*̲}̲ P\left ( h_k=1…
由Sigmoid函数可知:
Sigmoid(x)=11+e−xSigmoid\left ( x \right )=\frac{1}{1+e^{-x}}Sigmoid(x)=1+e−x1
则:
KaTeX parse error: No such environment: align* at position 7: \begin{̲a̲l̲i̲g̲n̲*̲}̲ P\left ( h_k=1…
同理,可以求得当给定了隐藏层的状态时,可见层上的某一神经元被激活的概率P(vk=1∣h)P\left ( v_k=1\mid \mathbf{h} \right )P(vk=1∣h):
KaTeX parse error: No such environment: align* at position 7: \begin{̲a̲l̲i̲g̲n̲*̲}̲ P\left ( v_k=1…
2.3、模型的训练
2.3.1、模型的优化函数
对于RBM模型,其参数主要是可见层和隐藏层之间的权重,可见层的偏置以及隐藏层的偏置,即θ=(W,a,b)\theta =\left ( W,\mathbf{a},\mathbf{b} \right )θ=(W,a,b),对于给定的训练样本,通过训练得到参数$\theta $,使得在该参数下,由RBM表示的概率分布尽可能与训练数据相符合。
假设给定的训练集为:
X={v1,v2,⋯,vns}\mathbf{X}=\left \{ \mathbf{v}^1, \mathbf{v}^2, \cdots , \mathbf{v}^{n_s} \right \}X={v1,v2,⋯,vns}
其中,nsn_sns表示的是训练样本的数目,vi=(v1i,v2i,⋯,vnvi)T\mathbf{v}^i=\left ( v_1^i,v_2^i,\cdots ,v_{n_v}^i \right )^Tvi=(v1i,v2i,⋯,vnvi)T。为了能够学习出模型中的参数,我们希望利用模型重构出来的数据能够尽可能与原始数据一致,则训练RBM的目标就是最大化如下的似然函数:
Lθ=∏i=1nsP(vi)L_\theta =\prod_{i=1}^{n_s}P\left ( \mathbf{v}^i \right )Lθ=i=1∏nsP(vi)
对于如上的似然函数的最大化问题,通常是取其log函数的形式:
lnLθ=ln∏i=1nsP(vi)=∑i=1nslnP(vi)lnL_\theta =ln\prod_{i=1}^{n_s}P\left ( \mathbf{v}^i \right )=\sum_{i=1}^{n_s}lnP\left ( \mathbf{v}^i \right )lnLθ=lni=1∏nsP(vi)=i=1∑nslnP(vi)
2.3.2、最大似然的求解
对于上述的最优化问题,可以使用梯度上升法进行求解,梯度上升法的形式为:
θ=θ+η∂lnLθ∂θ\theta =\theta +\eta \frac{\partial lnL_\theta }{\partial \theta }θ=θ+η∂θ∂lnLθ
其中,η>0\eta > 0η>0称为学习率。对于$ \frac{\partial lnL_\theta }{\partial \theta }$的求解,简单的情况,只考虑一个样本的情况,则:
KaTeX parse error: No such environment: align* at position 7: \begin{̲a̲l̲i̲g̲n̲*̲}̲ lnL_\theta &=…
则$ \frac{\partial lnL_\theta }{\partial \theta }$为:
KaTeX parse error: No such environment: align* at position 7: \begin{̲a̲l̲i̲g̲n̲*̲}̲ \frac{\partial…
而:
e−E(v,h)∑he−E(v,h)=e−E(v,h)Z∑he−E(v,h)Z=P(v,h)P(v)=P(h∣v)\frac{e^{-E\left ( \mathbf{v},\mathbf{h} \right )}}{\sum _{\mathbf{h}}e^{-E\left ( \mathbf{v},\mathbf{h} \right )}}=\frac{\frac{e^{-E\left ( \mathbf{v},\mathbf{h} \right )}}{Z}}{\frac{\sum _{\mathbf{h}}e^{-E\left ( \mathbf{v},\mathbf{h} \right )}}{Z}}=\frac{P\left ( \mathbf{v},\mathbf{h} \right )}{P\left ( \mathbf{v} \right )}=P\left ( \mathbf{h}\mid \mathbf{v} \right )∑he−E(v,h)e−E(v,h)=Z∑he−E(v,h)Ze−E(v,h)=P(v)P(v,h)=P(h∣v)
因此上式可以表示为:
∂lnLθ∂θ=−∑hP(h∣v)∂E(v,h)∂θ+∑v,hP(v,h)∂E(v,h)∂θ\frac{\partial lnL_\theta }{\partial \theta }=-\sum _{\mathbf{h}}P\left ( \mathbf{h}\mid \mathbf{v} \right )\frac{\partial E\left ( \mathbf{v},\mathbf{h} \right )}{\partial \theta }+\sum _{\mathbf{v},\mathbf{h}}P\left ( \mathbf{v},\mathbf{h} \right )\frac{\partial E\left ( \mathbf{v},\mathbf{h} \right )}{\partial \theta } ∂θ∂lnLθ=−h∑P(h∣v)∂θ∂E(v,h)+v,h∑P(v,h)∂θ∂E(v,h)
其中,∑hP(h∣v)∂E(v,h)∂θ\sum _{\mathbf{h}}P\left ( \mathbf{h}\mid \mathbf{v} \right )\frac{\partial E\left ( \mathbf{v},\mathbf{h} \right )}{\partial \theta }∑hP(h∣v)∂θ∂E(v,h)表示的是能量梯度函数∂E(v,h)∂θ\frac{\partial E\left ( \mathbf{v},\mathbf{h} \right )}{\partial \theta }∂θ∂E(v,h)在条件分布P(h∣v)P\left ( \mathbf{h}\mid \mathbf{v} \right )P(h∣v)下的期望;$\sum _{\mathbf{v},\mathbf{h}}P\left ( \mathbf{v},\mathbf{h} \right )\frac{\partial E\left ( \mathbf{v},\mathbf{h} \right )}{\partial \theta } 表示的是能量梯度函数表示的是能量梯度函数表示的是能量梯度函数\frac{\partial E\left ( \mathbf{v},\mathbf{h} \right )}{\partial \theta }在联合分布在联合分布在联合分布P\left ( \mathbf{v},\mathbf{h} \right )$下的期望。
对于$\sum _{\mathbf{v},\mathbf{h}}P\left ( \mathbf{v},\mathbf{h} \right )\frac{\partial E\left ( \mathbf{v},\mathbf{h} \right )}{\partial \theta } $,可以表示为:
KaTeX parse error: No such environment: align* at position 7: \begin{̲a̲l̲i̲g̲n̲*̲}̲ \sum _{\mathbf…
因此,只需要计算∑hP(h∣v)∂E(v,h)∂θ\sum _{\mathbf{h}}P\left ( \mathbf{h}\mid \mathbf{v} \right )\frac{\partial E\left ( \mathbf{v},\mathbf{h} \right )}{\partial \theta }∑hP(h∣v)∂θ∂E(v,h),这部分的计算分为三个,分别为:
- ∑hP(h∣v)∂E(v,h)∂wi,j\sum _{\mathbf{h}}P\left ( \mathbf{h}\mid \mathbf{v} \right )\frac{\partial E\left ( \mathbf{v},\mathbf{h} \right )}{\partial w_{i,j} }∑hP(h∣v)∂wi,j∂E(v,h)
- ∑hP(h∣v)∂E(v,h)∂ai\sum _{\mathbf{h}}P\left ( \mathbf{h}\mid \mathbf{v} \right )\frac{\partial E\left ( \mathbf{v},\mathbf{h} \right )}{\partial a_i}∑hP(h∣v)∂ai∂E(v,h)
- ∑hP(h∣v)∂E(v,h)∂bj\sum _{\mathbf{h}}P\left ( \mathbf{h}\mid \mathbf{v} \right )\frac{\partial E\left ( \mathbf{v},\mathbf{h} \right )}{\partial b_j}∑hP(h∣v)∂bj∂E(v,h)
上述的三个部分计算的方法如下:
已知:
Eθ(v,h)=−∑i=1nvaivi−∑j=1nhbjhj−∑i=1nv∑j=1nhhjwj,iviE_\theta \left ( \mathbf{v},\mathbf{h} \right )=-\sum_{i=1}^{n_v}a_iv_i-\sum_{j=1}^{n_h}b_jh_j-\sum_{i=1}^{n_v}\sum_{j=1}^{n_h}h_jw_{j,i}v_iEθ(v,h)=−i=1∑nvaivi−j=1∑nhbjhj−i=1∑nvj=1∑nhhjwj,ivi
则:
对wj,iw_{j,i}wj,i求导数
KaTeX parse error: No such environment: align* at position 7: \begin{̲a̲l̲i̲g̲n̲*̲}̲ \sum _{\mathbf…对aia_iai求导数
KaTeX parse error: No such environment: align* at position 7: \begin{̲a̲l̲i̲g̲n̲*̲}̲ \sum _{\mathbf…对bjb_jbj求导数
KaTeX parse error: No such environment: align* at position 7: \begin{̲a̲l̲i̲g̲n̲*̲}̲ \sum _{\mathbf…
因此,∂lnLθ∂θ\frac{\partial lnL_\theta }{\partial \theta }∂θ∂lnLθ为:
∂lnLθ∂wj,i=P(hj=1∣v)vi−∑vP(v)P(hj=1∣v)vi\frac{\partial lnL_\theta }{\partial w_{j,i} }=P\left ( h_j=1\mid \mathbf{v} \right )v_i-\sum_{\mathbf{v}}P\left ( \mathbf{v} \right )P\left ( h_j=1\mid \mathbf{v} \right )v_i∂wj,i∂lnLθ=P(hj=1∣v)vi−v∑P(v)P(hj=1∣v)vi
∂lnLθ∂ai=vi−∑vP(v)vi\frac{\partial lnL_\theta }{\partial a_i }=v_i-\sum_{\mathbf{v}}P\left ( \mathbf{v} \right )v_i∂ai∂lnLθ=vi−v∑P(v)vi
∂lnLθ∂bj=P(hj=1∣v)−∑vP(v)P(hj=1∣v)\frac{\partial lnL_\theta }{\partial b_j }=P\left ( h_j=1\mid \mathbf{v} \right )-\sum_{\mathbf{v}}P\left ( \mathbf{v} \right )P\left ( h_j=1\mid \mathbf{v} \right )∂bj∂lnLθ=P(hj=1∣v)−v∑P(v)P(hj=1∣v)
2.3.3、优化求解
Hinton提出了高效的训练RBM的算法——对比散度(Contrastive Divergence, CD)算法。
kkk步CD算法的具体步骤为:
对∀v\forall \mathbf{v}∀v,取初始值:v(0):=v\mathbf{v}^{\left ( 0 \right )}:=\mathbf{v}v(0):=v,然后执行kkk步Gibbs采样,其中第ttt步先后执行:
- 利用P(h∣v(t−1))P\left ( \mathbf{h}\mid \mathbf{v}^{\left ( t-1 \right )} \right )P(h∣v(t−1))采样出h(t−1)\mathbf{h}^{\left ( t-1 \right )}h(t−1)
- 利用P(v∣h(t−1))P\left ( \mathbf{v}\mid \mathbf{h}^{\left ( t-1 \right )} \right )P(v∣h(t−1))采样出v(t)\mathbf{v}^{\left ( t \right )}v(t)
上述两个过程分别记为:sample_h_given_v和sample_v_given_h。记pjv=P(hj=1∣v),j=1,2,⋯,nhp_j^{\mathbf{v}}=P\left ( h_j=1\mid \mathbf{v} \right ),j=1,2,\cdots ,n_hpjv=P(hj=1∣v),j=1,2,⋯,nh,则sample_h_given_v中的计算可以表示为:
- for j=1,2,⋯,nhj=1,2,\cdots ,n_hj=1,2,⋯,nh do
- {
- 产生[0,1]\left [ 0,1 \right ][0,1]上的随机数rjr_jrj
- hj={1if rj<pjv0otherwise h_j=\begin{cases} 1 & \text{ if } r_j<p_j^{\mathbf{v}} \\ 0 & \text{ otherwise } \end{cases}hj={10 if rj<pjv otherwise
- }
同样,对于sample_v_given_h,记pih=P(vi=1∣h),i=1,2,⋯,nvp_i^{\mathbf{h}}=P\left ( v_i=1\mid \mathbf{h} \right ),i=1,2,\cdots ,n_vpih=P(vi=1∣h),i=1,2,⋯,nv,则sample_h_given_v中的计算可以表示为:
- for i=1,2,⋯,nvi=1,2,\cdots ,n_vi=1,2,⋯,nv do
- {
- 产生[0,1]\left [ 0,1 \right ][0,1]上的随机数rjr_jrj
- vi={1if ri<pih0otherwise v_i=\begin{cases} 1 & \text{ if } r_i<p_i^{\mathbf{h}} \\ 0 & \text{ otherwise } \end{cases}vi={10 if ri<pih otherwise
- }
三、实验
实验代码
# coding:UTF-8import numpy as np
import random as rddef load_data(file_name):data = []f = open(file_name)for line in f.readlines():lines = line.strip().split("\t")tmp = []for x in lines:tmp.append(float(x) / 255.0)data.append(tmp)f.close()return datadef sigmrnd(P):m, n = np.shape(P)X = np.mat(np.zeros((m, n)))P_1 = sigm(P)for i in xrange(m):for j in xrange(n):r = rd.random()if P_1[i, j] >= r:X[i, j] = 1return Xdef sigm(P):return 1.0 / (1 + np.exp(-P)) # step_1: load data
datafile = "b.txt"
data = np.mat(load_data(datafile))
m, n = np.shape(data)# step_2: initialize
num_epochs = 10
batch_size = 100
input_dim = nhidden_sz = 100alpha = 1
momentum = 0.1
W = np.mat(np.zeros((hidden_sz, input_dim)))
vW = np.mat(np.zeros((hidden_sz, input_dim)))
b = np.mat(np.zeros((input_dim, 1)))
vb = np.mat(np.zeros((input_dim, 1)))
c = np.mat(np.zeros((hidden_sz, 1)))
vc = np.mat(np.zeros((hidden_sz, 1)))# step_3: training
print "Start to train RBM: "num_batches = int(m / batch_size)
for i in xrange(num_epochs):kk = np.random.permutation(range(m))err = 0.0for j in xrange(num_batches):batch = data[kk[j * batch_size:(j + 1) * batch_size], ]v1 = batchh1 = sigmrnd(np.ones((batch_size, 1)) * c.T + v1 * W.T)v2 = sigmrnd(np.ones((batch_size, 1)) * b.T + h1 * W)h2 = sigm(np.ones((batch_size, 1)) * c.T + v2 * W.T)c1 = h1.T * v1c2 = h2.T * v2vW = momentum * vW + alpha * (c1 - c2) / batch_sizevb = momentum * vb + alpha * sum(v1 - v2).T / batch_sizevc = momentum * vc + alpha * sum(h1 - h2).T / batch_sizeW = W + vWb = b + vbc = c + vc#cal_errerr_result = v1 - v2err_1 = 0.0m_1, n_1 = np.shape(err_result)for x in xrange(m_1):for y in xrange(n_1):err_1 = err_1 + err_result[x, y] ** 2err = err + err_1 / batch_size#print i,j,errprint i, err / num_batches#print Wm_2,n_2 = np.shape(W)for i in xrange(m_2):for j in xrange(n_2):print str(W[i, j]) + " ",print "\n",
参考文献
- 受限玻尔兹曼机(RBM)学习笔记
- 受限玻尔兹曼机(Restricted Boltzmann Machine,RBM)
简单易学的机器学习算法——受限玻尔兹曼机RBM相关推荐
- 简单易学的机器学习算法——梯度提升决策树GBDT
梯度提升决策树(Gradient Boosting Decision Tree,GBDT)算法是近年来被提及比较多的一个算法,这主要得益于其算法的性能,以及该算法在各类数据挖掘以及机器学习比赛中的卓越 ...
- 简单易学的机器学习算法——Metropolis-Hastings算法
在简单易学的机器学习算法--马尔可夫链蒙特卡罗方法MCMC中简单介绍了马尔可夫链蒙特卡罗MCMC方法的基本原理,介绍了Metropolis采样算法的基本过程,这一部分,主要介绍Metropolis-H ...
- 简单易学的机器学习算法——Latent Dirichlet Allocation(理论篇)
引言 LDA(Latent Dirichlet Allocation)称为潜在狄利克雷分布,是文本语义分析中比较重要的一个模型,同时,LDA模型中使用到了贝叶斯思维的一些知识,这些知识是统计机器学习的 ...
- 简单易学的机器学习算法——非线性支持向量机
一.回顾 前面三篇博文主要介绍了支持向量机的基本概念,线性可分支持向量机的原理以及线性支持向量机的原理,线性可分支持向量机是线性支持向量机的基础.对于线性支持向量机,选择一个合适的惩罚参数,并 ...
- 简单易学的机器学习算法——K-Means++算法
一.K-Means算法存在的问题 由于K-Means算法的简单且易于实现,因此K-Means算法得到了很多的应用,但是从K-Means算法的过程中发现,K-Means算法中的聚类中心的个数k需要事先指 ...
- 简单易学的机器学习算法——Gibbs采样
一.Gibbs采样概述 前面介绍的Metropolis-Hastings采样为从指定分布中进行采样提供了一个统一的框架,但是采样的效率依赖于指定的分布的选择,若是选择的不好,会使得接受率比较低,大量的 ...
- 史上简单易学的机器学习算法——EM算法 缘木求鱼
一.机器学习中的参数估计问题 二.EM算法简介 在上述存在隐变量的问题中,不能直接通过极大似然估计求出模型中的参数,EM算法是一种解决存在隐含变量优化问题的有效方法.EM算法是期望极大(Expecta ...
- 简单易学的机器学习算法——神经网络之BP神经网络
一.BP神经网络的概念 BP神经网络是一种多层的前馈神经网络,其主要的特点是:信号是前向传播的,而误差是反向传播的.具体来说,对于如下的只含一个隐层的神经网络模型: (三层BP神经网络模型) ...
- [转载]简单易学的机器学习算法-主成分分析(PCA)
一.数据降维 对于现在维数比较多的数据,我们首先需要做的就是对其进行降维操作.降维,简单来说就是说在尽量保证数据本质的前提下将数据中的维数降低.降维的操作可以理解为一种映射关系,例如函数 ,即由原来的 ...
最新文章
- MobaXterm 设置在使用export DISPLAY=xx.xx.xx.xx:0.0后调用图形化界面不弹出提示方法
- V4L2框架分析学习
- 原创:centos7.1下 ZooKeeper 集群安装配置+Python实战范例
- 大学老师的月薪多少?实话实说:4万多一点……
- java 读取txt文件指定行_在Java中读取txt文件中的特定行
- 《HTML5+CSS3网页设计入门必读》——第1章 标记简史1.1 从IETF到W3C:HTML 4的诞生过程...
- Webpack实战(八):教你搞懂webpack如果实现代码分片(code splitting)
- 配置中心、消息队列、分布式服务链路跟踪
- 原来“事务0丢失”是这样做到的
- 大数据学习笔记02-HDFS-常用命令
- 如何在Windows平台下可以方便获取到android的源码?
- Bigemap中添加离线地图数据包 教程
- 354. 俄罗斯套娃信封问题--(每日一难phase2--day9)
- 世嘉MD游戏开发【十一】:背景卷轴滚动(视差滚动)Parallax Scroll和摄像机
- cad.net objectarx 后台打开dwg
- 从iRedMail 创建用户脚本学习PostgreSQL数据库
- SpringBoot集成Swagger文档及自定义访问路径
- 进行淘宝商品比价的定向爬虫
- 计算机硬盘配置参数错误怎么办,电脑提示移动硬盘参数错误的解决方法
- TypeError: can‘t unbox heterogeneous list: int64 = float64