【笔记】Adam各个参数分析:params, lr=1e-3, betas=(0.9, 0.999), eps=1e-8,weight_decay=0,amsgrad=False

【笔记】Adam各个参数分析:params, lr=1e-3, betas=(0.9, 0.999), eps=1e-8,weight_decay=0,amsgrad=False_第1张图片

【笔记】Adam各个参数分析:params, lr=1e-3, betas=(0.9, 0.999), eps=1e-8,weight_decay=0,amsgrad=False_第2张图片

 【笔记】Adam各个参数分析:params, lr=1e-3, betas=(0.9, 0.999), eps=1e-8,weight_decay=0,amsgrad=False_第3张图片

【笔记】Adam各个参数分析:params, lr=1e-3, betas=(0.9, 0.999), eps=1e-8,weight_decay=0,amsgrad=False_第4张图片 【笔记】Adam各个参数分析:params, lr=1e-3, betas=(0.9, 0.999), eps=1e-8,weight_decay=0,amsgrad=False_第5张图片

【笔记】Adam各个参数分析:params, lr=1e-3, betas=(0.9, 0.999), eps=1e-8,weight_decay=0,amsgrad=False_第6张图片 【笔记】Adam各个参数分析:params, lr=1e-3, betas=(0.9, 0.999), eps=1e-8,weight_decay=0,amsgrad=False_第7张图片

【笔记】Adam各个参数分析:params, lr=1e-3, betas=(0.9, 0.999), eps=1e-8,weight_decay=0,amsgrad=False_第8张图片 【笔记】Adam各个参数分析:params, lr=1e-3, betas=(0.9, 0.999), eps=1e-8,weight_decay=0,amsgrad=False_第9张图片

【笔记】Adam各个参数分析:params, lr=1e-3, betas=(0.9, 0.999), eps=1e-8,weight_decay=0,amsgrad=False_第10张图片 【笔记】Adam各个参数分析:params, lr=1e-3, betas=(0.9, 0.999), eps=1e-8,weight_decay=0,amsgrad=False_第11张图片

【笔记】Adam各个参数分析:params, lr=1e-3, betas=(0.9, 0.999), eps=1e-8,weight_decay=0,amsgrad=False_第12张图片 【笔记】Adam各个参数分析:params, lr=1e-3, betas=(0.9, 0.999), eps=1e-8,weight_decay=0,amsgrad=False_第13张图片

 【笔记】Adam各个参数分析:params, lr=1e-3, betas=(0.9, 0.999), eps=1e-8,weight_decay=0,amsgrad=False_第14张图片

【笔记】Adam各个参数分析:params, lr=1e-3, betas=(0.9, 0.999), eps=1e-8,weight_decay=0,amsgrad=False_第15张图片 【笔记】Adam各个参数分析:params, lr=1e-3, betas=(0.9, 0.999), eps=1e-8,weight_decay=0,amsgrad=False_第16张图片

 

5 数据集和模型

Source code: https://github.com/YiddishKop/ml_src_adam_compare.git

5.1 MNIST

5.1.1 Dataset

数据集 样本类型 训练集 验证集
MNIST 灰度图(28*28) 60000 6000

5.1.2 NN 架构

形状
input_shape (28,28,1)
cnn_filter (3,3,30)
cnn_filter (3,3,60)
max_pooling (2,2)
flatten
fcn_relu 600
keep_prob 0.5
fcn_softmax 10

5.1.3 model parameter

参数
learning_rate 0.001 (no decay)
loss fn categorical cross entropy
epoch 30

5.2 Cifar-10

5.2.1 Dataset

数据集 样本类型 训练集 验证集
Cifar-10 RGB彩图(32*32*3) 50000 10000

5.2.2 NN 架构

形状
input_shape (32,32,3)
cnn_filter (3,3,32)
cnn_filter (3,3,32)
max_pooling (2,2)
keep_prob 0.25
cnn_filter (3,3,64)
cnn_filter (3,3,64)
max_pooling (2,2)
keep_prob 0.25
flatten
fcn_relu 512
fcn_softmax 10

5.2.3 model parameter

参数
learning_rate 1e-4 (decay)
loss fn mse
epoch 200
batch_size 256

5.3 回归

5.3.1 Dataset

数据集 样本类型 训练集 验证集
house sales in king county, USA csv 18000 3600

5.3.2 型号架构

形状
input_shape 71
fcn_relu 1000
fcn_relu 1000
fcn_relu 1000
fcn_relu 1
keep_prob 1

5.3.3 model parameter

参数
learning_rate 1e-4 (no decay)
loss fn mse
epoch 40
batch_size 100

5.4 DCGAN

5.4.1 Dataset

数据集 样本类型 训练集 验证集
Cartoon image Cifar-10 RGB彩图 18000 3600

5.4.2 Model架构

Generator of conditional-DCGAN

输入feature (256+100维)
→ 通过fc [input = 356, output = (64 × 4 × 4 × 8)]
→ reshape成[4, 4, 128]
→ batch normalization(所有batch normalization的epsilon = 1e-5, momentum = 0.9)
→ relu activation
→ 通过4层deconv layer (kernel size = 5 × 5, stride = 2, filters依序为[256, 128, 64, 3])
→ 每通过一层deconv都经过batch normalization和relu再传到下一层

Discriminator of conditional-DCGAN

两个feature:
image 维度= (64, 64, 3),分成三类:real(符合文字叙述的图)、wrong(不符合文字叙述的图)、fake(G 对应文字产生的图)。
text 维度= 256。
图片经过4层convolution layer(kernel size = 5 × 5, stride = 2, filters各自为[64, 128,256, 512] )
→每一层都经过leaky relu (max(x, 0.2 x))
→后三层的convolution layer通过leaky relu前都会经过batch normalization (这部分的参数设定与generator中相同)

5.4.3 model parameter

参数
learning_rate 2e-4(decay)
loss fn mse
epoch 200
batch_size 64

5.5 Wasserstein GAN

在WGAN 原始论文中提到:因为WGAN 的训练过程较不稳定,不太适合使用就有动量的优化器,可能会导致loss 增加或是产生的sample 变差,因此可用 RMSProp 取代Adam,而此次我也会针对这一点进行验证。

5.5.1 Dataset

同 DCGAN

5.5.2 Model架构

更改DCGAN的以下部分:

  • 去掉discriminator 输出的sigmoid。
  • 去掉 loss function 中的 log。
  • 在discriminator 加上weight-clipping,设定为0.01。

5.5.3 model parameter

参数
learning_rate 1e-4(decay)
loss fn mse
epoch 15
batch_size 64
weight-cliping 0.01

6 贡献和创新性

7 结论

MNIST 如同Adam 论文中的叙述,Adam 默认的参数是这个资料集上最好的优化器设定,然而,当 β1、β2 调小一点时,结果不会差很多。
Cifar-10 Adam 中的 β2 = 0.9。
regre Adam 中的 β1、β2 调小一点(如0.5 和0.9),可使error 下降一些。
DCGAN 使用Adam 时,要把β1 设定的小一点,才能较快随着discriminator 改变的方向转向。
WGAN 使用Adam,动量会造成收敛方向无法即时随着discriminator 改变的方向即时,因此结果会变差,并且变差的情况比DCGAN 严重许多。

8 可以改进的地方

可尝试使用更好的降维方法。我在参数对loss 的作图中,使用的降维方法为PCA,PCA 的降维过程中会损失一些空间分布的特性。所以我认为可以试试看其他降维的方法,例如: t-SNE,t-SNE可以保留一些空间的特性,也许可从图中得到更多资讯。从我做出的实验结果去找最佳Adam 参数的规则,设定一套流程来判断Adam 最佳的参数。原本我推测Adam 最佳参数与task 的性质(ex: Image classification)有关,然而Google Net 最佳的参数如果套用到Cifar-10 的model,performance 会变得非常差,所以,从我的实验结果来看,参数的选择应该和task 的性质没有绝对的相关性。后来我想到model 参数量的多寡会影响到整个 loss function 的分布,因为直觉上简单的model 应该鞍点或是局部最小值的数量应该会远小于复杂的model 中鞍点跟局部最小值的数量,所以未来可以尝试看看model 参数量与Adam 最佳参数的关系。除了不同参数在鞍点的表现,也可以尝试看看不同参数在local minimum 的表现。

 

 

 

 

 

 

你可能感兴趣的:(小菜鸡加油,线性代数,概率论,几何学)