Deep Neural Nets with Generative Pre-training
Learning Layers of Features by Stacking RBMs
-
层叠RBM的训练
- 先训练一层RBM
- 然后将这一层RBM的激活值作为输入训练第二层RBM
- 不断叠加
-
称之为深度信念网络
- 最顶层仍然类似RBM
- 底层变成有向图,仅由隐藏层指向可视层
- 整体不再是玻尔兹曼机,因为底层的链接不再对称
-
产生数据(3层网络为例)
- 对最顶层RBM不断进行Gibbs采样(h3和h2),直到热平衡
- 使用h2利用W2直接得到h1一次
- 同样地,向下利用W1得到数据
- h1和h2,data和h1之间的由底层向上层的链接只用于推断,实际上可以是向下权重的转置(近似方法)
-
平均两个因子分布(Factorial Distribution)并不能得到一个因子分布
- 乘积因数的加法平均不能保证乘法效应的一致性
-
贪婪式训练
- RBM可以定义大量的概率分布: p ( v ∣ h ) , p ( h ∣ v ) , p ( v , h ) , p ( h ) , p ( v ) p(v | h), p(h | v), p(v, h), p(h), p(v) p(v∣h),p(h∣v),p(v,h),p(h),p(v)
- 可以将RBM模型表示为 p ( v ) = ∑ h p ( h ) p ( v ∣ h ) p(v) = \sum_h p(h) p(v | h) p(v)=∑hp(h)p(v∣h)
- 给定 p ( v ∣ h ) p(v | h) p(v∣h),提升 p ( h ) p(h) p(h)就会提升 p ( v ) p(v) p(v)
- 将第一个RBM的权重转置,继续训练第二个RBM,效果会更好
-
使用wake-sleep算法对训练好的深度信念网络进行微调
- 随机的一次自下而上的过程,以调整自上而下的权重,更好地重建下层特征(wake)
- 对顶层RBM采样,迭代若干次,使用CD方法调整权重
- 利用顶层RBM的可视层,进行一次自上而下的过程,调整自下而上的权重,以更好的重建上层特征(sleep)
- 相比于传统的算法,顶层RBM比一个顶层神经元层更好
-
一个例子:底层无监督地训练,顶层带标签地进行训练(soft match)
Discriminative Learning for DBNs
- 微调DBN以更判别性地分类
- 微调过程
- 首先在堆叠RBM过程中,每次学习一层
- 将整个训练过程视为“预训练”,可以在后期进行微调(局部搜索)
- 对比wake-sleep算法
- 使用反向传播使网络更具有判别性
- 深网络更容易学习
- 更易泛化
- 反向传播对于贪婪式预训练更好
- 贪婪式与训练对于大网络非常好,尤其是存在局部性的时候
- 直到网络具有足够好的特征检测器之后再进行反向传播
- 预训练后的权重已经能够反应数据的一些信息
- 微调只会轻微调整特征以保证类别边界正确,不需要发现新特征
- 使用反向传播,尽管大部分数据无标签也能很好地工作
- 一个问题:针对判别性任务,很多学到的特征是没有用的
- 在最顶层加入一个softmax层分类,并使用反向传播微调权重
What happens during discriminative fine-tuning?
- 底层权重基本没有变化,但是对网络的分类性能有很大提升
- 微调操作使深层网络的性能比浅层网络更好
- 类别标签本身包含了一些依赖于现实事物的信息,因此预训练能够更好的维持这些关联
Modeling Real-valued Data with an RBM
- RBM对于实际应用中的含高斯噪声的线性单元的处理
- 可视层使用高斯单元,隐藏层使用ReLU
- 对手写数字数据集,采用中间强度值(小于1的实数)代表均值域逻辑单元的概率
- 但是实际图像不能这么干,因为其像素值几乎概率为1地为周围像素的均值
- 可视层使用高斯单元:
E
(
v
,
h
)
=
∑
i
(
v
i
−
b
i
)
2
2
σ
2
−
∑
j
b
j
h
j
−
∑
i
,
j
v
i
σ
i
h
j
w
i
j
E(\bold v, \bold h) = \sum_i \frac{(v_i - b_i)^2}{2 \sigma^2} - \sum_j b_j h_j - \sum_{i, j} \frac {v_i} {\sigma_i} h_j w_{ij}
E(v,h)=∑i2σ2(vi−bi)2−∑jbjhj−∑i,jσivihjwij
- 能量函数由 b i b_i bi平移的抛物线,并且受到交叉项所代表的常数梯度对应先的斜度控制开口
- 应用中很容易出问题——权重从v到h被标准差除(集中),从h到v被标准差乘(削减),会使得两层权重很极端,导致隐藏层会一直要么on要么off
- 解决方案:隐藏层设置原本可视层多的单元,以产生足够大的h到v的权重作用效果
- 在标准差变得更小的时候,需要改变隐藏层单元数量
- 阶段性sigmoid单元:
- 从一个随机二值单元获取若干拷贝
- 所有的拷贝具有相同的权重和相同的自适应偏置量,但是每一个都针对偏置量有一个偏移量
- 随着标准差不断变小,被on的隐藏单元个数会线性增加
- 快速近似:
<
y
>
=
∑
n
σ
(
x
+
0.5
−
n
)
≈
log
(
1
+
e
x
)
≈
max
(
0
,
x
+
n
o
i
s
e
)
<y> = \sum_n \sigma(x + 0.5 - n) \approx \log(1 + e^x) \approx \max(0, x + noise)
<y>=∑nσ(x+0.5−n)≈log(1+ex)≈max(0,x+noise)
- ReLU更快,实际更实用
- ReLU的一个性质,如果偏置项为0,那么尺度对线性变换等价
- 表达卷积网络中的平移等价性