在机器学习算法中,在最小化损失函数时,可以通过梯度下降思想来求得最小化的损失函数和对应的参数值,反过来,如果要求最大化的损失函数,可以通过梯度上升思想来求取。
https://www.cnblogs.com/pinard/p/5970503.html
Epoch(时期):
当一个完整的数据集通过了神经网络一次并且返回了一次,这个过程称为一次>epoch。(也就是说,所有训练样本在神经网络中都 进行了一次正向传播 和一次反向传播 )
再通俗一点,一个Epoch就是将所有训练样本训练一次的过程。
Batch(批 / 一批样本):
将整个训练样本分成若干个Batch。
Batch_Size(批大小):
每批样本的大小。
Iteration(一次迭代):
训练一个Batch就是一次Iteration(这个概念跟程序语言中的迭代器相似)。
为什么要使用多于一个epoch?
在神经网络中传递完整的数据集一次是不够的,而且我们需要将完整的数据集在同样的神经网络中传递多次。但请记住,我们使用的是有限的数据集,并且我们使用一个迭代过程即梯度下降来优化学习过程。如下图所示。因此仅仅更新一次或者说使用一个epoch是不够的。
随着epoch数量增加,神经网络中的权重的更新次数也在增加,曲线从欠拟合变得过拟合。
那么,问题来了,几个epoch才是合适的呢?
不幸的是,这个问题并没有正确的答案。对于不同的数据集,答案是不一样的。但是数据的多样性会影响合适的epoch的数量。比如,只有黑色的猫的数据集,以及有各种颜色的猫的数据集。
https://www.jianshu.com/p/22c50ded4cf7?from=groupmessage
对抗生成网络(GAN)为什么输入随机噪声?
GAN本来就是完成一个分布的配准变换,GAN的生成器就是把一个高斯分布(或者其他先验的随机分布)变换成目标数据分布。
随机噪声可以避免缓解模式坍塌问题。因为我们希望训练好的生成网络可以有多种多样的输出。那么如何控制呢?我们可以用不同输入得到不同输出。模型一旦训练好,便是确定性的了,里面的参数都是固定的。假如不给不同输入,则输出必然相同。因此,我们是想有不同输出,才用到不同输入。这是一个多对多过程。
噪声种类也可以有很多种,你可以去看BigGAN这篇论文中对噪声做的实验,我们可以用高斯分布,还可以用均匀分布,还可用伯努利二维分布(要么-1,要么1),还有其他多种分布。其中高斯分布是连续的,而我们图像时离散的。这中间可能都有关系。
https://www.zhihu.com/question/320465400/answer/1051141660
相对熵 (Relative entropy),也称KL散度 (Kullback–Leibler divergence)
交叉熵 (Cross entropy)
JS散度
https://zhuanlan.zhihu.com/p/74075915
utils.py包含可视化等函数