今日网课初步学习了
Gradient Descent,特此把笔记记下,以后有空看看。
(同专业的发现不要抄我作业 TAT)
定义出损失函数loss function,若该函数可微分,则可以使用梯度下降法。设变量为X={Xa,Xb……},损失函数为L(X)。为了找到损失函数的最小值(即目标的最优解),通过任意取一个初始值{Xa0,Xb0,……},然后根据函数的性质迭代n次,找出较优的X解,迭代的方法如下:
当迭代次数足够大,或者偏微分足够小可看作几乎为0时,结束迭代,此时得到最优解X。
因此,在此迭代过程中,learning rate大小的选择尤为重要。Learning rate在式子中相当于是一个与微分相乘的权值,因此可以理解为每次试探的步长,learning rate的选择可以下面例子说明。
如上图所示,这是目标的loss function。显然,要让损失最少就要到达最低点。
①
若learning rate过小,相当于在此过程中步长过小的蓝色情况,因此,若要到达最低点,则需要更多次数的迭代。极大地增加了计算量,而且若迭代次数满之后还未到达最低点,甚至会导致找不到较优解。
②
若learning rate适中,相当于在此过程中步长适中的红色情况,因此三次迭代后刚好到达最优解,结束迭代。然而这个值较为精确,很难找到。
③
若learning rate过大,相当于在此过程中步长过大的绿色情况,由于迭代时步长过时,直接跳过了最低点到达了高点,于是又折回走,来回振荡,找不到最优解。
所以,为了选出合适的learning rate,可以采用一些算法自动得到适合的Adaptive Learning rate
最普遍简单的方法:每次迭代都按一定的算法来减少learning rate,例如
为了更好地找到最低点,最好的方法是每个函数都设立一个learning rate。
Adagrad方法:
在迭代的减数中再除以过去微分的均方根,结合变化的learning rate,化简得到:
特点是下降速度会越来越慢,后期非常缓慢。
图中有一个疑点:
按照原理来说,应该偏微分大的时候跨大一点,但是在分母加上了偏微分的均方根,使此时的跨步反而小了,如何解释?
答:
直观的解释:可以看成是一种反差,当某次微分突然变得特别大/小,因此除以均方根可以看出反差。
正式的解释:当同时需要考虑多个参数时,不能单纯地认为微分越大步伐越大。由二次方程推导最好的步伐大小应是正比于一次微分,反比于二次微分。但计算二次微分的计算时间代价会成倍增加,于是可以用过去微分的均方根来表示二次微分的大小,可以达到相似的效果。
Stochastic Gradient Descent:
不等计算完所有的迭代x才更新参数,随机或顺序计算迭代完一个x就更新一次参数。使得迭代速度变快。
Feature Scaling:
让不同的变量(中的x1和x2)的scale相同。
通过使得scale一样,使得更新的w1和w2的量级一样,在各个方向上更加公平。
*Feature scaling的方法(归一化normalization):
例如上图中方法,有R个参数,每次输入的数据有R个,取这一次组成一个dimension,算出均值mi,和标准差,然后用上述式子把数据归一化到[0,1]。
数学基础:
泰勒展开:如果函数足够平滑,在已知函数某一点的各阶导数值都已知的情况下,可以用以下来估计领域中的值:
所以,当x接近x0的时候:
同理有多个变量时:
因为导数都是常量,可以简化写成:
又因为下次的位置是在以步长为半径,此时位置为圆心的圈内,即下图所示的红圈内,需满足以下条件:
把第一个加数看成
第二个加数看成
然后分析函数:
S是常数相加,可以忽略不分析。变成两个向量相乘
要使此时函数的值最小,必然是以下情况:
即可推出:
推出一开始的结论:
(这里只考虑了一次展开,如果考虑二次式的话运算量增大,一般把learning rate调大一点。
Gradient Descent的注意点
可能找到了极小值或微分很接近0的地方,而找不到最小值。
总结一般步骤:
①
确定参数数量
②
选择合适的loss function
③
选择learning rate的大小或变化策略
④
选择迭代的策略,如Adagrad
⑤
归一化处理