优化方法
对于单神经元模型,我们可以使用消元法得到精确解。但对于多个数据点,这种解很可能不存在,我们只能借助数值去优化得到一个非常相似的数值结果。
为什么叫做优化?因为我们需要借助计算机强大的计算能力去多次“搜索”和“试错”,从而一步步的降低误差L,而最简单的优化方式就是暴力搜索和随机尝试,比如找到最合适的w*和b*,我们就可以从部分实数空间中随机选择w和b,并计算出与真实模型的误差,然后从测试的误差集合R中找到最小的误差L,他对应的w和b就是我们要找的最优的参数。
这种方法虽然简单,但是面对大规模、高维度的数据优化问题效率就非常低了,在这里我们引出的梯度下降(Gradient Descent)的概念,他是神经网络中最常用的优化算法,非常适合优化海量数据的网络模型以及我们现在提到的线性模型。
我们在高中学过导数的概念,现在需要求解函数的极大值和极小值,我们可以令导数的0,求出对应的点(驻点),在检验驻点的类型即可,以函数为例,我们绘制函数和导数在区间[-10,10]的曲线,其中蓝色为实线
,黄色为虚线
,如下图所示,函数导数为0的点就是函数的驻点,函数的极大值和极小值都在驻点中。
函数的梯度定义为函数对各个自变量的偏导数组成的向量,考虑到3维函数,梯度函数
,如下图所示,
,图中红色箭头的长度表示表示方向梯度的模,箭头的方向代表着模的方向,可以看到,箭头的方向,总是向着变化最大的方向,箭头越长,梯度的模也就越大。
通过这个例子,我们能直观的看到,函数各处的梯度方向总是只想函数值增大的方向,反方向则是指向减少的方向,我们利用这个性质,只需要
来更新x',就会获得越来越小的值,其中用来缩放梯度向量,一般设置为较小的值,比如0.01,0.001。对于一维函数,上述向量形式可以退化成
通过上式,对x'更新若干次,就能得到最相近的x'处对应的y'。上述的优化方式即为梯度下降算法,他通过循环计算梯度,并更新带优化参数,从而得到函数极小值时
的最优解,需要注意,在深度学习中,x代表输入,参数一般用
、
、
表示。我们利用刚才的梯度下降算法来求w*和b*,最小化均误方差
我们需要优化的参数w和b,就能得到如下的式子
然后按照此形式来更新参数。