1. 定义
维基百科对深度学习的定义: 一类通过多层非线性变换对高复杂性数据建模算法的合集.
2. 激活函数实现去线性化
tensorflow提供了7种不同的非线性激活函数, 常见的有tf.nn.relu, tf.sigmoid, tf.tanh.
用户也可以自己定义激活函数..
3. 损失函数的定义
3.1 经典损失函数
3.1.1 交叉熵
用途: 刻画两个概率分布之间的距离, 交叉熵H越小, 两个概率分布就越近.
给定两个概率分布p和q, 通过q来表示p的交叉熵为:
H(p,q)=−∑xp(x)logq(s)
H
(
p
,
q
)
=
−
∑
x
p
(
x
)
log
q
(
s
)
p代表的是正确答案, q代表的是预测值.
3.1.2 softmax回归
用途: 将神经网络的输出变成一个概率分布.
设原始神经网络的输出为
y1
y
1
…
yn
y
n
, 经过softmax回归处理之后的输出为:
softmax(y)i=y′i=eyi∑j=1neyj
s
o
f
t
m
a
x
(
y
)
i
=
y
i
′
=
e
y
i
∑
j
=
1
n
e
y
j
3.1.3 tf.nn.softmax_cross_entropy_with_logits函数
该函数把softmax回归和交叉熵同一封装了起来.
4. 神经网络优化算法
4.1 梯度下降算法
优化单个参数的取值.
4.2 反向传播算法
以一个高效的方式在所有的参数上使用梯度下降算法, 从而使损失函数尽可能的小.
参数更新公式:
θn+1=θn−η∂∂θnJ(θn)
θ
n
+
1
=
θ
n
−
η
∂
∂
θ
n
J
(
θ
n
)
式中η式学习率, 需要人为设定.
5. 神经网络的进一步优化
5.1 学习率的设置
5.1.1 exponential_decay函数
它可以指数级地减小学习率.
5.2 过拟合问题
(第三张图展示了过拟合的情景)
用正则化方法避免过拟合的问题
思想: 在损失函数中加入刻画模型复杂度的指标R(w), 优化时不直接优化损失函数L(θ), 而是优化L(θ)+λR(w).
R(w)通常有两种: L1正则化
R(w)=∑i|wi|
R
(
w
)
=
∑
i
|
w
i
|
和 L2正则化
R(w)=∑i|w2i|
R
(
w
)
=
∑
i
|
w
i
2
|
tf.contrib.layers.l2_regularizer函数可以计算一个给定参数的L2正则化项的值.
5.3 滑动平均模型
思想: 通过影子变量来控制模型的更新速度.
具体做法: 先指定一个衰减率decay, 然后给每一个变量都维护一个影子变量.
shadowVariable=decay∗shadowVariable+(1−decay)∗variable
s
h
a
d
o
w
V
a
r
i
a
b
l
e
=
d
e
c
a
y
∗
s
h
a
d
o
w
V
a
r
i
a
b
l
e
+
(
1
−
d
e
c
a
y
)
∗
v
a
r
i
a
b
l
e
decay可以通过设定numUpdates来动态设置:
decay=min(decay,1+numUpdates10+numUpdates)
d
e
c
a
y
=
min
(
d
e
c
a
y
,
1
+
n
u
m
U
p
d
a
t
e
s
10
+
n
u
m
U
p
d
a
t
e
s
)