DeepFloodbeta

Day 1 ResNet& Adam

按照AI的建议,今天是精读这两篇论文

Adam读完理解
Adam处理的问题是通过样本,随机梯度下降得到“最优”的目标函数

f(\theta)
g_t = \nabla_{\theta} f_t(\theta_{t-1})
m_t = \beta_1 m_{t-1} + (1-\beta_1)g_t
v_t = \beta_2 v_{t-1} + (1-\beta_2)g_t^2
\hat{m}_t = \frac{m_t}{1 - \beta_1^t}
\hat{v}_t = \frac{v_t}{1 - \beta_2^t}
\theta_t = \theta_{t-1} - \frac{\eta}{\sqrt{\hat{v}_t} + \epsilon} \hat{m}_t

这段算法实际上解决的是加入样本,如何逼近data generating process的方法
算法本身讲的是优化过程中,
我们要如何调整步长使得算法能更快收敛
Adam的方法主要是通过一阶矩和二阶矩信息来自动调节步长
特点是加入历史动量,同时对起步初期有偏差校正
中间的关键是一阶矩、二阶矩和超参数的更新过程

Adam成功很重要的一点是随着样本加入
样本本身代表的目标函数信息是在收敛
加上下降法本身的收敛
我们才能得到最后的收敛结果

这一过程中,要加快收敛过程
除了ADAM本身的小技巧之外(假设一阶矩二阶矩和步长间的相关关系,这很大程度上是在连续甚至光滑的前提下)
另一个很重要的点是加样本初期如何最大程度上保证样本信息前后的一致性
能被算法捕捉(Adam里用了偏差校正,但是这还是很粗糙的。毕竟公式里$$E(g_i)=E(g_t)$$其实是很强的)
(我没有跟最新的算法,可能也有算法做了这个)


ResNet读完理解
虽然才第二篇
已经有点炼丹的感觉了
全篇没几个公式
都是图

神经网络对函数的逼近很好理解
毕竟函数展开的话也是多项式的形式
深度和广度可以被认为是等价的
但是实践中随着神经网络的深度或者层数增加,出现了退化现象
也就是错误率随着深度增加而上升
也有梯度消失/爆炸的问题(不是只有resnet能解决)
当然这不是理论错误,这和采取的函数形态、训练方法多数是有关的
尤其是其他条件不变,只增加深度的情况下
越高深度越能捕捉更高维度的特征
但是在样本量等其他条件不变的情况下
这样做没有意义
增加的只是噪音

从训练过程来说
resnet增加了恒等的部分
其实是给了模型在深度参数上的自我调节能力

今天大概过了这两篇论文
明天可能要试着跑一下代码
这种算法论文
不写代码跑一下的话
感觉还是浮在表面
尤其是resnet这篇
看完和没看很难说多知道了什么