smooth的作用
在loss function中的主要目的是把loss function变成continuous differerntiable function(连续可微分函数),从而在optimization(优化)
Smooth是需要看一下的, 心里有个数. 但是具体调参怎么调是没辙的. 第一, 你不可能告诉网络, 这层你得学个边界检测的功能出来. 第二, 不同任务下会有不同的weights(虽然底层的特征有很大的通用性), 你觉得你凭什么来指导一个看图片比你快得多的机器?
再说现在是否需要强求smooth. 现在的趋势是鼓励使用小filter, 3x3大小, 多加层次(这样, 非线性更好点). 换句话说, 3x3的图片, 总共才9个像素, 你怎么判断smooth与否呢? 当然如果你使用大的filter, 一般5x5往上, 运气不差的话, 你是可以看到smooth的结果的.
咱们再说另外一个极端, 一个网络,运行的完美(满足应用要求就算完美), 打开一看, 这weights不smooth啊. 你告诉我, 你打算怎么办? 没错, 具有不平滑的权重的网络同样可以获得很好的结果(这种情况我都习以为常了).
那么可视化网络就不重要了?
非常重要, 但是不在训练这块, 而是帮助理解网络的原理这块. 理解网络原理后, 你才能在设计结构的时候心里有感觉(只是有感觉而已), 网络出了问题, 或者在某些情况下不满意, 有更好的直觉去调整.(没错, 只是直觉, 虽然有些情况下的调整从网络原理来看逻辑上应该可以工作, 但是人家就是不工作, 你能咬机器去么?)
Adam
Adam算法引入了二阶动量的概念,二阶动量是什么呢, 是历史动量的平方和,可以理解为这个参数他更新的频率大小,二阶动量大就说明这个参数经常更新,我们就希望这个经常更新的参数可以慢一点更新,很少更新的参数每次更新的步子就大一点,但是如果选取历史动量的平方和,随着时间的累计这个值会特别大,导致下降梯度近似于0,无法继续训练,于是我们定义如下,在加上之前SGD的一阶动量,就构成了Adam算法的核心。
Adam = Adaptive + Momentum,顾名思义Adam集成了SGD的一阶动量和RMSProp的二阶动量。