我们最后就来看一下随机梯度下降法这个算法吧。
这是一个效率高的算法吗?
嗯。不过在介绍它之前,还要说一下,最速下降法除了计算花时间以外,还有一个缺点。
欸,还有缺点?
嗯,那就是容易陷入局部最优解。
这是什么意思呀?
在讲解回归时,我们使用的是平方误差目标函数。这个函数形式简单,所以用最速下降法也没有问题。现在我们来考虑稍微复杂一点的,比如这种形状的函数(图 2-17)。
图 2-17
这个函数怎么看起来软绵绵的……
用最速下降法来找函数的最小值时,必须先要决定从哪个
开始找起。之前我用
说明的时候是从
或者
开始的,还记得吗?
你这么一说我想起来了。不过为什么要从 3 或者 -1 开始找呢?
那是为了讲解,我随便选的。
这样啊,那实际去解决问题时,也可以随便选个初始值吗?
选用随机数作为初始值的情况比较多。不过这样每次初始值都会变,进而导致陷入局部最优解的问题。
我还是不太明白这是什么意思……
我们假设这张图中标记的位置就是初始值(图 2-18)。
图 2-18
啊,我好像有点明白了。从这个点开始找,似乎可以求出最小值。
那你说说,什么情况下反而求不出最小值呢?
是不是把这里作为初始值的情况(图 2-19)?好像没计算完就会停止。
图 2-19
没错。这就是陷入局部最优解。
这个算法虽然简单,但是容易发生各种问题呀。这可是你花费了这么多时间教给我的算法,太遗憾了。
没事儿,最速下降法也不会白学,随机梯度下降法就是以最速下降法为基础的。
是这样啊。
你还记得最速下降法的参数更新表达式吗?
嗯,就是表达式 2.5.10 吧?
对。这个表达式使用了所有训练数据的误差,而在随机梯度下降法中会随机选择一个训练数据,并使用它来更新参数。这个表达式中的
就是被随机选中的数据索引。
变没啦。
最速下降法更新 1 次参数的时间,随机梯度下降法可以更新
次。此外,随机梯度下降法由于训练数据是随机选择的,更新参数时使用的又是选择数据时的梯度,所以不容易陷入目标函数的局部最优解。
随机选择训练数据来学习这种做法看起来有些敷衍,真的能找到答案吗?
虽然有些不可思议,但实际上的确会收敛。
真是不可思议……
我们前面提到了随机选择 1 个训练数据的做法,此外还有随机选择
个训练数据来更新参数的做法。
这样啊,那具体选择几个是可以由自己决定的吧?
嗯,设随机选择
个训练数据的索引的集合为
,那么我们这样来更新参数。
关于
的更多内容,请参考附录 A.1。
假设训练数据有 100 个,那么在
时,创建一个有 10 个随机数的索引的集合,例如
,然后重复更新参数就行了吗?
就是这样。这种做法被称为小批量(mini-batch)梯度下降法。
这像是介于最速下降法和随机梯度下降法之间的方法。
不管是随机梯度下降法还是小批量梯度下降法,我们都必须考虑学习率
。把
设置为合适的值是很重要的。
那学习率是如何决定的呢?也是随意决定的吗?
这是一个很难的问题。可以通过反复尝试来找到合适的值,不过,除此之外还有几个办法,你可以研究一下,我觉得会很有意思。
好呀。不过今天我学到了好多东西,现在有点累了……等我实现的时候要是碰到了问题再去研究好了。
也好。还没开始做就什么都往脑子里塞,会把头撑破的。
是啊,谢谢你!