1.激活函数
主要的激活函数(Activation Functions)包括:
- sigmoid
- tanh
- ReLU
- leaking ReLu
上述所有的关系中, 输出均为, 输入均为
.
上述函数的导数, 记所有的激活函数均为, 那么其导数为
- sigmoid,
- tanh,
- ReLU
2. 正则化(Regularization)
正则化用来避免过拟合.
上述方框中的内容称为L2正则化. 为样本个数.
为正则化参数.
对于向量, 正则化部分可以表示为:
对于矩阵:
在求导过程中
迭代过程中就可以得到:
因此每次迭代过程中, 总是在缩小, 因此避免了权重过大.
3. Dropout
每一次迭代的时候随机失效(disable)一些节点. 注意是在训练过程中, 每次迭代的时候.
4. mini-batch
假如有100,000个样本, 每次训练的时候使用1,000个样本.
- 第1次迭代, 使用1-1,000个样本.
- 第2次迭代, 使用1001-2,000个样本.
...
5. momentum
避免梯度来回抖动, 用低通滤波减少抖动, 加强同一方向的梯度
for iteration i
compute dw, db
Vdw = beta * Vdw + (1-beta) * dw
Vdb = beta * Vdb + (1-beta) * db
// Update
W = W - alpha * Vdw
b = b - alpha * Vdb
6. RMSProp
同样避免抖动, 加强同一方向的梯度.
for iteration i
compute dw, db
dw2 = dw * dw
db2 = db * db
Sdw = beta * Sdw + (1-beta) * dw2
Sdb = beta * Sdb + (1-beta) * db2
// update
W = W - alpha * dW / sqrt(Sdw)
b = b - alpha * db / sqrt(Sdb)
7. Adam
初始化
Vdw = 0, Sdw = 0, Vdb = 0, Sdb = 0
迭代优化
for iteration i
compute dw, db
Vdw = beta1 * Vdw + (1-beata1) * dw
Vdb = beta1 * Vdb + (1-beata1) * db
dw2 = dw * dw
db2 = db * db
Sdw = beta2 * Sdw + (1-beta2) * dw2
Sdb = beta2 * Sdb + (1-beta2) * db2
Vdw_corrected = Vdw / (1-beta1^t)
Vdb_corrected = Vdb / (1-beta1^t)
Sdw_corrected = Sdw / (1-beta2^t)
Sdb_corrected = Sdb / (1-beta2^t)
//update
W = W - alpha * Vdw_corrected / (sqrt(Sdw_correct) + eplison)
b = b - alpha * Vdb_corrected / (sqrt(Sdb_correct) + eplison)
beta1 = 0.9
, beta2 = 0.999
, eplison = 10e-8
7. 全连接层
一个层级中的每个节点都与上个层级中的每个节点相连。
网友评论