如何判断随机梯度下降法收敛?
① 我们确定随机梯度下降法已经收敛的一个标准方法是:画出最优化的代价函数关于迭代次数的变化。
![d7d70177d97c21a0d0a1cd0803f0d045.png](https://i-blog.csdnimg.cn/blog_migrate/5f3572b30c85a24e24e2ac786f4a7f47.jpeg)
② 为了检查随机梯度下降的收敛性,我们要做的是每1000次迭代运算中,计算出前一步中计算出的cost函数,并对算法处理的最后1000个样本的cost值求平均然后画出来。
注:通过观察这些画出来的图,我们就能检查出随机梯度下降是否在收敛。
③ 下面是几幅画出来的图的例子:
![f76dead0cb2160b79dd489763f3f9a8f.png](https://i-blog.csdnimg.cn/blog_migrate/72103f3e985db8f8bc3d901b879bfeeb.png)
④ 第一幅图:
![666cb1cd6573ac3b23c3ae278b7879d3.png](https://i-blog.csdnimg.cn/blog_migrate/568506e7bd2703e47cafa8bbb111ac34.jpeg)
注:假如你已经画出了最后1000组样本的cost函数的平均值,由于它们都只是1000组样本的平均值,因此它们看起来有一点嘈杂,因此cost的值不会在每一个迭代中都下降。
注:如果你得到像这样的图,那么你应该判断这个算法是在下降的,然后从蓝色箭头的点开始变得平缓, 说明你的学习算法已经收敛了。
注:如果你想试试更小的学习速率(红色曲线),那么你很有可能看到的是算法的学习变得更慢了,代价函数的下降也变慢了。
注:但是很有可能会让算法收敛到一个好一点的解。
注:随机梯度下降不是直接收敛到全局最小值,而是在局部最小附近反复振荡,所以使用一个更小的学习速率,最终的振荡就会更小。
⑤ 第二幅图:
![4cc64a9050be58c01db58f8780df6f70.png](https://i-blog.csdnimg.cn/blog_migrate/6af7044a44b11e7934eeb69cb53956f8.jpeg)
注:如果你把数 1000 (图中的蓝线)提高到5000(图中的红线)组样本,那么可能你会得到一条更平滑的曲线。
注:增大平均的训练样本数的缺点就是:现在每5000个样本才能得到一个数据点,因此你所得到的关于学习算法表现的反馈就显得有一些"延迟" ,因为每5000个样本才能得到图上的一个数据点,而不是每1000个样本就能得到。
⑥ 第三幅图:
![f16a625b3a2737736518b757dfa87373.png](https://i-blog.csdnimg.cn/blog_migrate/e9d639fb3ef28ea215e739e4a7476ff4.jpeg)
注:算法没有很好地学习,代价项并没有下降,但同样地,如果你对这种情况时也用更大量的样本进行平均,你很可能会观察到红线所示的情况。
注:能看得出,实际上代价函数是在下降的,只不过蓝线用来平均的样本数量太小了,并且蓝线太嘈杂,你看不出来代价函数的趋势确实是下降的。
注:所以可能用5000组样本来平均比用1000组样本来平均更能看出趋势。
注:即使是使用一个较大的样本数量,比如我们用5000个样本来平均,我用另一种颜色(图中紫色)来表示,即使如此,你还是可能会发现这条学习曲线是这样的,它还是比较平坦,即使你用更多的训练样本。
注:如果是这样的话,那可能就更肯定地说明不知道出于什么原因,算法确实没怎么学习好,那么你就需要调整学习速率或者改变特征变量或者改变其他的什么。
⑦ 第四幅图:
![367f9c707cd0a1005641ee6d5b1b1c19.png](https://i-blog.csdnimg.cn/blog_migrate/2cec4d177378d25d8d1f22639b84f6c1.jpeg)
注:这是一个很明显的信号,告诉你算法正在发散,那么你要做的事就是用一个更小一点的学习速率α。
⑧ 当运行随机梯度下降时,算法会从某个点开始,然后曲折地逼近最小值。
注:它不会真的收敛,而是一直在最小值附近徘徊,因此你最终得到的参数实际上只是接近全局最小值,而不是真正的全局最小值 (学习速率α保持不变)。
注:如果你想让随机梯度下降确实收敛到全局最小值,你可以随时间的变化减小学习速率α的值。
![1aad1d8625c9ac3ff634c689df7da44b.png](https://i-blog.csdnimg.cn/blog_migrate/2b65a14890594e4c93d338b0df6a4b94.png)
注:以上是一种典型的方法来设置α的值,但是这里增加了两个额外的参数,需要你花时间来确定常数1和常数2上,这让算法显得更繁琐,因此我们很少采用逐渐减小α的值的方法。
⑨ 在随机梯度下降中,你看到更多的还是让 α 的值为常数,虽然两种做法的人都有。
Python基础积累
指向不变
print
运行结果:
Hello World
Alex Li
My name is Alex Li Alex Li
My name is PaoChe Ge Alex Li
您好,我来了
注:print里面是变量,变量可以是被赋值了带引号的字符串。
注:print函数中逗号左右无论空多少格,两边的内容之间都被一个空格替代。
注:name2=name指的是name2与name一样指向Alex Li的内存地址,接下来name指向改了,但是name2不变。