最优化(Optimization)是寻找能使得损失函数值最小化的参数 W 的过程。在cs231n中循序渐进的讲解了3种方法。
1:随机搜索
2:随机局部搜索
3:跟随梯度
下面来简单的分别介绍:
1.随机搜索
1)首先,随机初始化矩阵权重W,令当前的权重为最佳权重
2)其次,设置搜索次数,每次迭代中随机产生一个权重矩阵W,将当前W产生的损失值与
Wbest
产生的损失值比较,若更小,则将
Wbest
替代为当前W
3)所有迭代计算完毕后,得到的
Wbest
即所求权重
2.随机局部搜索
随机局部搜索的大体步骤与随机搜索类似,具体步骤如下:
1)首先,随机初始化矩阵权重W
2)其次,设置搜索次数,每次迭代中随机产生一个扰动矩阵
δW
,若
W+δW
产生的损失值比
W
产生的损失值更小,则用
3)所有迭代计算完毕后,得到的
W
即所求权重
3.跟随梯度
梯度表示最快的下降方向,那么就可以不用随机局部搜索而直接利用梯度来寻找下降方向。
梯度计算又可分为两种方法:
数值梯度法和分析梯度法
首先来看数值梯度法
数值梯度法是令W中每个
分析梯度法
通过loss function对w求导得到梯度,该方法计算快,但是缺点是如果公式过于复杂,求导困难。
梯度下降法
最后简单介绍如何用梯度下降法得到最优的W矩阵。
1)首先利用loss function计算W的梯度
2)设置步长(step_size),令weights += - step_size * weights_grad
这里,step_size也称为学习率,是一个超参,如果步长过小,则收敛速度过慢,如果步长过大可能会进入局部最优解,严重时无法收敛。所以通常情况下,刚开始学习时,步长可以设置的大一些,随着迭代次数的增加,减小步长。
另一个值得一提的问题是,在计算W的梯度时,我们不会将所有数据都用来计算,而是选择一个batch,而这个batch也是一个超参,例如32,64,256等。因为没有选取所有数据,所以计算得到的W的梯度可能不够准确,有时候可以认为是噪声,所以loss在学习过程中上下波动,但是总体上一定是呈下降趋势。